php - 你能用引用循环后的重复值来解释这种奇怪的行为吗?

标签 php

<分区>

Possible Duplicate:
Strange behaviour after loop by reference - Is this a PHP bug?

ideone

代码:

<?php
$arr = array(array(1),array(2),array(3));
foreach($arr as &$i) {
    print_r($i);
}
foreach($arr as $i) {
    print_r($i);
}

输出

Array
(
    [0] => 1
)
Array
(
    [0] => 2
)
Array
(
    [0] => 3
)
Array
(
    [0] => 1
)
Array
(
    [0] => 2
)
Array
(
    [0] => 2
)

我知道我只需要在第一个循环之后放置一个 unset($i) 来修复它,但我无法真正弄清楚是什么导致了 2 重复。它似乎总是被倒数第二个值覆盖的最后一个值。当数组项是基元(PHP 中的“标量”)时,它似乎不会发生。

当有人忘记取消设置引用时,我遇到过几次重用变量的问题。第一次真的让我很困惑。

重复

最佳答案

这是因为您的第二个循环在每次迭代中都修改了 $arr[2] 的值(因为在第一个循环完成后,$i 被保留为对 $arr[2] 的引用)。因此,当第二个循环运行时,它将 $arr 的每个元素依次分配给 $arr[2],然后打印结果。

关于php - 你能用引用循环后的重复值来解释这种奇怪的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8915386/

相关文章:

php - 配置 PhpStorm RESTful 客户端以使用 Laravel

php - Symfony2 中的本地化错误页面

php - 部分代码被跳过

php - SilverStripe PaginatedPages 显示自定义摘要

php - 重写我的查询以从选择语句中删除

php - jQuery Json + jQuery onChange

PHP - mysqli_stmt_bind_param 组多个 $types

php - 如何设计独立于浏览器的html页面?

PHP/MySQL - 外键问题

php - 在 CakePHP 3 中的何处放置自定义 PHP 类?