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.