php foreach over an array and assignment of this a

2019-04-29 20:55发布

I want to add a value to an array while foreaching it :

foreach ($array as $cell) {
    if ($cell["type"] == "type_list") {
        $cell["list"] = $anObject;
        error_log(print_r($cell, TRUE), 0);
}
error_log(print_r($array, TRUE), 0);

The first printr is ok but the object added disapear when I leave the loop ant print the array.

I guess this is a normal behaviour, what is the best way to work around this "feature" ?

2条回答
虎瘦雄心在
2楼-- · 2019-04-29 21:20

When you iterate over the array, $cell is a copy of the value, not a reference so changing it will not effect the value in the array.

You should either use & to make the $cell a reference:

foreach ($array as &$cell) {
    if ($cell["type"] == "type_list") {
        $cell["list"] = $anObject;
        error_log(print_r($cell, TRUE), 0);
}
error_log(print_r($array, TRUE), 0);

Or access the array items directly using an index.

foreach ($array as $i => $cell) {
    if ($array[$i]["type"] == "type_list") {
        $array[$i]["list"] = $anObject;
        error_log(print_r($array[$i], TRUE), 0);
}
error_log(print_r($array, TRUE), 0);
查看更多
Summer. ? 凉城
3楼-- · 2019-04-29 21:32

Just call $cell by reference like this:

foreach($array as &$cell) {...}

And it should retain the value. Passing by reference.

查看更多
登录 后发表回答