通过引用的PHP数组仍然存在

时间:2016-04-08 11:03:58

标签: php arrays reference

我遇到了一些奇怪的事情,希望有人可以解释发生了什么。我已将其归结为以下案例,以便在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项的事实持续到下一次迭代。这是预期的吗?

1 个答案:

答案 0 :(得分:2)

foreach的文档说:

  

警告 $value的引用和最后一个数组元素保持均匀   在foreach循环之后。建议按unset()销毁它。

foreach ($lines as &$line) { } // Trouble-causer
unset($line);