關於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 )