php foreach over an array and assignment of this array

霸气de小男生 提交于 2019-12-07 05:59:29

问题


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" ?


回答1:


Just call $cell by reference like this:

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

And it should retain the value. Passing by reference.




回答2:


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);


来源:https://stackoverflow.com/questions/8552828/php-foreach-over-an-array-and-assignment-of-this-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!