尝试更新阵列时出错

I have a two questions with a symfony's project.

My first one : I am trying to modify some data in an array. I have this code

var_dump($results); // FIRST ONE
foreach ($results as $result) {
    foreach ($result as $res) {
        foreach ($dates as $date) {
            if(!array_key_exists($date,$res)) {
                $res = array_merge($res,[$date => '0']);
            }
        }
        var_dump($res); // THIS ONE IS MODIFIED
    }
}
var_dump($results); // LAST ONE... SAME AS THE FIRST ONE

I don't understand why my array ' $results ' is no updated... am i missing something ?

And my second question : is there any way to simplify this code ? I don't like the 3 foreach.

Thanks you guys :)

Unless you're passing an object in PHP, PHP does not pass values by reference. $res is a copy of the value, not a link to the original value. If you know what you're doing, you can pass by reference. When passing by reference, altering $res would alter the original data. You pass by reference by prefixing a & to the variable or argument.

Since this is a nested foreach, you'll also have to pass $result by reference to avoid that being a copy of the item of $results.

foreach ($results as &$result) {
    foreach ($result as &$res) {
        foreach ($dates as $date) {
            if(!array_key_exists($date,$res)) {
                $res = array_merge($res,[$date => '0']);
            }
        }
    }
}

PHP foreach copy each item when iterate so $result array will not update when you change $res item.

1) You can use array keys to change main array

foreach($arrr as $k => $item) {arrr[$k]['key'] = 'changed'}

2) Or you can get link to the $res item and change it dirrectly

foreach($arrr as &$item) {$item['key'] = 'changed'}

Note that second case can cause different issues