一月 10

今天在公司處理某支程式時,發現使用 PHP 的 foreach() 可能會踩到這個陷阱(或許算是 bug ?! O_o )。

以下這段範例程式,結果是正確的。

<?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

Technorati Tags: ,

(Visited 2315 times)

3 Responses to “[PHP] foreach() 會踩到的陷阱 ( bug ? )”

  1. 路人 Says:

    跟 foreach 沒有關係 ?


    From Taiwan Taiwan
    Using Google Chrome Google Chrome 20.0.1132.47 on Ubuntu Linux Ubuntu Linux
  2. jnlin Says:

    因為 'b' 被轉型成 0 了


    From Taiwan Taiwan
    Using Android Browser Android Browser on Android Android 4.0.4
  3. Joe Horn Says:

    看來問題在 if ... else ... ?


    From Taiwan Taiwan
    Using Google Chrome Google Chrome 23.0.1271.97 on Windows Windows 7

Leave a Reply

T_T 
XD 
(怒) 
8-) 
(哭) 
(羞) 
=_=凸 
:-D 
:-| 
:-O 
:-( 
:-) 
(驚) 
O_o 
:-P 
:-S 
(眨眼)