我遇到了一些奇怪的事情,希望有人能解释发生了什么。我已经将其归结为以下在PHP版本5.3.10-1ubuntu3.21:上复制的情况
$lines = array("foo" => "bar");
foreach ($lines as &$line) { } // Trouble-causer
$temp = $lines;
foreach ($lines as $key => $line) {
$lines[$key] = "test";
}
print_r($lines);
print_r($temp);
由于我不在$temp
上工作,因此预期的结果是
Array
(
[foo] => test
)
Array
(
[foo] => bar
)
但实际结果是
Array
(
[foo] => test
)
Array
(
[foo] => test
)
如果我删除标记为Trouble-causer
的行,它将按预期工作。不知何故,我通过引用循环$lines
项的事实一直持续到下一次迭代。这是意料之中的事吗?
foreach的文档说明:
警告引用
$value
和最后一个数组元素保持偶数在CCD_ 5循环之后。建议用unset()
销毁。
foreach ($lines as &$line) { } // Trouble-causer
unset($line);