通过引用的PHP数组仍然存在
我遇到了一些奇怪的事情,希望有人能解释发生了什么。我将其归结为以下在PHP版本5.3.10-1ubuntu3.21上复制的情况:通过引用的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
$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);