1. 程式人生 > >PHP---引用使用foreach(xxx as &$x)時候的坑。

PHP---引用使用foreach(xxx as &$x)時候的坑。

注意如下一段程式碼:

$data1 = ["1","2","3"];
$data2 = ["4","5","6"];
$all = 0;
foreach($data1 as &$x){
   $all += $x
}
#注意這裡$x是$data1最後一個元素的引用
$all2 = 0;
foreach($data2 as $x=>$y){
    $all2 += ($y+$data1[$x]); //原意是計算:1+4 + 2+5 + 3+6 的總和,結果應該是21
}
echo all2;
結果輸出:20

為什麼?
因為第一個foreach執行完後,$x是$data1[2]的引用,所以:

由於第二個foreach迴圈,$data1[2]在不經意間,經歷了0->1->2的變化。

因此,平時在使用完“引用foreach”,可以看情況加上:

unset($x);