“foreach”循环中的引用行为:了解数组修改
在 PHP 中,在“foreach”循环中使用引用可能会导致意外的结果数组修改。此行为在以下代码中突出显示:
$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 )
分步说明
要理解这种行为,必须跟踪“foreach”每次迭代期间发生的变化循环:
完成第一个 'foreach' 循环(引用迭代)后,$v 仍然保留对 $a[3] ('d') 的引用。
因此,在第二个“foreach”循环(值迭代)之后,数组$a 已被修改,'c' 出现了两次。
解决问题
为了避免这种意外行为,建议在每次迭代后取消设置引用:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
这将产生预期的输出:
Array ( [0] => a [1] => b [2] => c [3] => d )
以上是为什么在 PHP 的'foreach”循环中使用引用会导致意外的数组修改?的详细内容。更多信息请关注PHP中文网其他相关文章!