PHP Foreach 通过引用传递:最后一个元素重复之谜揭开
考虑以下 PHP 代码:
$arr = ["foo", "bar", "baz"]; foreach ($arr as &$item) { /* do nothing by reference */ } print_r($arr); foreach ($arr as $item) { /* do nothing by value */ } print_r($arr);
执行时,它意外地修改了原始数组 $arr,导致以下输出:
Array ( [0] => foo [1] => bar [2] => baz ) Array ( [0] => foo [1] => bar [2] => bar )
理解行为
在初始 foreach 循环之后,变量$item 仍然是对与 $arr[2] 相同的内存位置的引用。因此,第二个 foreach 循环的每次迭代(按值传递参数)都会用新迭代的值替换引用的值(因此 $arr[2])。
详细说明
在第一个循环中:
在第一个循环结束时,$item 仍然指向 $arr[2]。
在第二个循环中:
澄清误解
此行为不被视为错误。它与 PHP 中引用的预期行为一致。如果您在循环之外使用以下语法,将会观察到类似的结果:
for ($i = 0; $i < count($arr); $i++) { $item = $arr[$i]; }
结论
在 PHP 中使用引用时,认识到这一点至关重要通过引用变量所做的修改也会影响原始值。根据期望的结果,可以有效地利用或避免这种行为。
以上是为什么在使用带有引用传递的 foreach 循环时,PHP 数组中的最后一个元素会重复?的详细内容。更多信息请关注PHP中文网其他相关文章!