如果我们要在一边遍历的同时,更改数组里面的值,应该这么做
$a = [2, 4, 8]; echo '分割线-----------' . PHP_EOL; foreach ($a as &$value) { $value = $value * 10; }
注意 $value 变量前有个&符号,代表将遍历到当前值的引用赋值给$value,如果不写&则赋值操作就会无效!!!
注意&使用后,如果继续对$a进行遍历查看值:
$a = [2, 4, 8]; foreach ($a as $value) { echo "value:" . $value . PHP_EOL; } echo '分割线-----------' . PHP_EOL; foreach ($a as &$value) { $value = $value * 10; } unset($value);// & 引用赋值后必须将该值销毁,以便接下来继续使用 $value 这个变量 foreach ($a as $value) { echo "value:" . $value . PHP_EOL; }
此时输出结果:
value:2 value:4 value:8 分割线----------- value:20 value:40 value:80
如果不使用unset() 将其销毁,则输出结果为:
value:2 value:4 value:8 分割线----------- value:20 value:40 value:40 // 注意这里不是80
这个问题的解决办法是 PHP 官方文档指出的:
Warning: 数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁。
本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work
尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。