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;f
·
注意如下一段代码:
$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;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
结果输出:20
- 1
为什么?
因为第一个foreach运行完后,$x是$data1[2]的引用,所以:
由于第二个foreach循环,$data1[2]在不经意间,经历了0->1->2的变化。
- 1
因此,平时在使用完“引用foreach”,可以看情况加上:unset($x);
$arr=[1,2,3,4];
foreach ($arr as &$val) {
echo $val;
}
// 1,2,3,4
unset($val);
foreach ($arr as $val) {
echo $val;
}
//1,2,3,4
第一次循环后 $val = $arr[3] ;
第二次循环:
$arr[3] = $val = $arr[0]; //1
$arr[3] = $val = $arr[1]; //2
$arr[3] = $val = $arr[2]; //3
$arr[3] = $val = $arr[3]; //3 $arr[3]赋值成3了
更多推荐
已为社区贡献1条内容
所有评论(0)