什么是神奇的? 每个循环后,$ data的最后一个元素发生了变化。
<?php
$data = array("1" => "a", "2" => "b");
print_r($data);
foreach($data as $k=>&$v) {}
foreach($data as $k=>$v) {}
print_r($data);
输出:[2] =&gt; a在第二个foreach之后
Array
(
[1] => a
[2] => b
)
Array
(
[1] => a
[2] => a
)
代码改为此,数组不会改变:
<?php
foreach($data as $k=>&$v) {}
foreach($data as $k=>&$v) {}
答案 0 :(得分:5)
来自foreach手册:
警告 $ value的引用和最后一个数组元素保持均匀 在foreach循环之后。建议通过unset()来销毁它。
因此,在第一个foreach
的末尾,$v
是对数组中最后一个元素的引用。下一个foreach
的第一次迭代会更改$v
的值(到第一个数组元素的值),这是对数组中最后一个元素的引用,因此它会被更改。
$data = array("1" => "a", "2" => "b");
print_r($data);
foreach($data as $k=>&$v) {}
unset($v); // *** UNSET HERE ***
foreach($data as $k=>$v) {}
print_r($data);
结果:
Array
(
[1] => a
[2] => b
)
Array
(
[1] => a
[2] => b
)