今天在公司處理某支程式時,發現使用 PHP 的 foreach() 可能會踩到這個陷阱(或許算是 bug ?!
以下這段範例程式,結果是正確的。
<?php $arr = array(); array_push( $arr , 1 ); array_push( $arr , 2 ); array_push( $arr , 3 ); $arr['a'] = 'A'; $arr['b'] = 'B'; $arr['c'] = 'C'; foreach ( $arr as $k => $v ) { echo "$k => $v" . PHP_EOL; } ?>
結果:
0 => 1 1 => 2 2 => 3 a => A b => B c => C
但下面這段範例程式的結果就很妙了…
<?php $arr = array(); array_push( $arr , 1 ); array_push( $arr , 2 ); array_push( $arr , 3 ); $arr['a'] = 'A'; $arr['b'] = 'B'; $arr['c'] = 'C'; foreach ( $arr as $k => $v ) { if ( $k == 'b' ) { echo "$k => $v" . PHP_EOL; } if ( $k === 'b' ) { echo "$k ==> $v" . PHP_EOL; } } ?>
結果:
0 => 1 b => B b ==> B