由于引用变量引起的意外数据更改

时间:2014-04-10 17:47:57

标签: php

此代码导致意外的数组内容更改。可能是什么原因:

<?php

$arr[] = array('a', 'b');
$arr[] = array('c', 'd');

print_r($arr);
foreach ($arr as &$processed_arr) {

}

foreach ($arr as $processed_arr) {

}

print_r($arr);

输出:

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => c
            [1] => d
        )

)
Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => a
            [1] => b
        )

)

1 个答案:

答案 0 :(得分:1)

它确实可能是由于你之前的循环。 php中的foreach会离开迭代 即使在循环之后,范围内的变量也是可变的(可怕,我知道)。

所以这样的代码:

$loop = [1,2,3];

foreach ($loop as &$c) {}

$c = 4;

var_dump($loop);

会产生包含loop

[1,2,4]变量

其余的代码看起来不是它的原因。当然 status的实施可以自由地做任何事情但是看起来它的名字 非常不可能的imo。 :)

下次发布更多上下文可能会有所帮助。试着削减它是件好事 像你已经完成的代码发布,但如果发布的代码不再公开 问题(你的问题没有),这使得猜测错误更加困难。