今天在公司處理某支程式時,發現使用 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