为什么在 Foreach 内部使用引用时元素值会在数组中重复?
考虑以下 PHP 代码:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
令人惊讶的是,输出显示最后一个元素的值已经覆盖了其他元素的值元素,导致:
Array ( [0] => a [1] => b [2] => c [3] => c )
解释奇怪的
此行为是 PHP 的记录方面,源于在中使用引用 (&)第一个 foreach 循环。
在第一个循环期间,数组的每个元素都通过引用分配给 $v。当修改 $v 时,它会更改原始数组中引用的元素。因此,当在后续循环中重新分配 $v 时,它会无意中更改与引用对应的数组元素。
解决方案
要避免此问题,请显式取消设置引用第二个 foreach 循环之前的最后一个元素:
foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
理解分步过程
以下是代码中发生的情况的分步说明:
第一个 foreach 循环:
第二个foreach 循环:
以上是为什么在 PHP Foreach 循环中使用引用会导致元素值重复?的详细内容。更多信息请关注PHP中文网其他相关文章!