PHP foreach引用
首先,上代码
$arr=[1,2,3,4,5,6]; foreach ($arr as $key => &$value) { if($value==4){ unset($arr[$key]); } } foreach ($arr as $key => $value) { echo $value; }
各位认为echo的结果会是什么?你可能会很快算出结果为 ‘1,2,3,5,6’,但是,结果会有点小意外,各位不妨输出一下 结果会是‘1,2,3,5,5’。那么问题来了,为什么?
那么下面我们来解释一下:
在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。
如果我们直接将第一次的结果直接输出,结果不会发生变化,会是‘1,2,3,4,5,6’;
当我们第二次foreach循环时此时第一次循环对$value最后的引用还在,所以当我们第二次用$value执行后结果会发生变化。
解决办法:1、在第一次foreach循环完成后unset($value),取消掉引用;2、在第二次循环时不用$value变量换成一个其他任意变量都可以;
$arr=[1,2,3,4,5,6]; foreach ($arr as $key => &$value) { if($value==4){ unset($arr[$key]); } //如果没有unset($value),$value仍然是对最后一项的引用 } foreach ($arr as $key => $value) { //$arr [5]将会更新每个值$value echo $value; //直到最后,倒数第二个 }
时间: 2024-12-19 12:02:18