PHPでは、(、およびが配列$aで$b$cあるとすると)、機能的には$a = array_replace($b, $c)常に$a = $c + $b?と同じです。
そうでないことを示すエッジケースを見つけることができないようです。
(1つの次元で作業するだけで、この質問は再帰とは関係ありません。つまり、array_replace_recursive() :)
編集:コメントの中に、ユニオン演算子が参照を保持することを示唆するメモを見つけましたが、それをarray_replace()怠ったことに気づいていません。