注意如下一段代码:
$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);