foreach和&共用出現的問題

關於PHPforeach和引用符&使用時遇到的問題

$arr = array(1,2,3);
foreach($arr as &$a){
echo $a."\t";
}

echo "\n";

foreach($arr as $a){
echo $a."\t";
}

輸出爲:
1 2 3
1 2 2
而期望輸出爲:
1 2 3
1 2 3
可以看到,數組的最後一個元素被修改了!

實際上,是數組的最後一個元素,被N次改寫了。具體過程爲:

第一次foreach結束之後,$a$arr[last]指向同一塊地址
第二次foreach裏,每次,$a的內容都被改寫!
$arr[2] = $a = $arr[0] = 1
$arr[2] = $a = $arr[1] = 2
$arr[2] = $a = $arr[2] = 2

這樣就很明顯了!通過以下代碼可以看出具體過程:
$arr = array(1,2,3);
foreach($arr as &$a){
echo $a."\t";
}

echo "\n";

foreach($arr as $a){
echo "$a( $arr[2] )\t";
}

輸出爲:
1 2 3
1( 1 ) 2( 2 ) 2( 2 )

轉自http://flykobe.com/index.php/2012/02/13/php-foreach-bug/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章