I am trying to overwrite the elements of one array with values from another – without creating additional elements in the process.
For example:
You can use array_intersect_key and array_merge to do it:
$result = array_merge($base, array_intersect_key($replace, $base));
array_intersect_key
isolates those elements of $replace
with keys that already exist in $base
(ensuring that new elements will not appear in the result) and array_merge
replaces the values in $base
with these new values from $replace
(while ensuring that keys appearing only in $base
will retain their original values).
See it in action.
It is interesting to note that the same result can also be reached with the order of the calls reversed:
$result = array_intersect_key(array_merge($base, $replace), $base);
However this version does slightly more work, so I recommend the first one.