我遇到了一些奇怪的事情,希望有人可以解释发生了什么。我已将其归结为以下案例,以便在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
项的事实持续到下一次迭代。这是预期的吗?
答案 0 :(得分:2)
foreach的文档说:
警告
$value
的引用和最后一个数组元素保持均匀 在foreach
循环之后。建议按unset()
销毁它。
foreach ($lines as &$line) { } // Trouble-causer
unset($line);