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

通过引用的PHP数组仍然存在,php,arrays,reference,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($l

我遇到了一些奇怪的事情,希望有人能解释发生了什么。我将其归结为以下在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
)
如果我删除标记为“故障原因”的行,它将按预期工作。不知何故,我通过引用循环
$line
项的事实一直持续到下一次迭代。这是预期的吗?

的文档,例如:

警告引用
$值
,最后一个数组元素保持偶数 在
foreach
循环之后。建议通过
unset()
将其销毁

该文件包括:

警告引用
$值
,最后一个数组元素保持偶数 在
foreach
循环之后。建议通过
unset()
将其销毁


谢谢我错过了那一点。虽然行为很奇怪,但至少现在我意识到了。谢谢!我错过了那一点。虽然行为很奇怪,但至少现在我意识到了。你的实际结果是无关的,因为你有两次相同的钥匙!你的实际结果是无关的,因为你有相同的关键2次!
foreach ($lines as &$line) { } // Trouble-causer
unset($line);