关于数组推送的误解 - PHP

时间:2013-07-14 19:53:45

标签: php arrays

我在PHP中看到一种我不理解的行为。这是:

foreach($food as $fruit) {
    $fruit["banana"] = "yummy";
    dd($fruit); /* returns "banana" => "yummy" */
}

dd($fruit); /* returns "banana" => "yummy" */
dd($food[0]); /* doesn't return "banana" => "yummy" as I expect it to */

为简单起见,我将所有的die dump取消注释,但当然我只是逐个运行它们。

为什么我的推动不会影响整个阵列?

数组看起来像这样

array(2) { 
    [0]=> array(2) { 
        ["id"]=> string(1) "1" 
        ["name"]=> string(7) "Something" 
    } 
    [1]=> array(2) { 
        ["id"]=> string(1) "2" 
        ["name"]=> string(5) "Somewhere" 
    } 
}

1 个答案:

答案 0 :(得分:5)

如果要更改foreach中的数组元素,则需要使用引用,因为foreach中的值只是临时值,不会影响原始值。

示例:

foreach($food as &$fruit) {
    $fruit["banana"] = "yummy";
    dd($fruit); /* returns "banana" => "yummy" */
}