Объединение двух сложных объектов в PHP

У меня есть два объекта данных, преобразованные из JSON. оба довольно сложны, и я хотел бы объединить их так же, как jQuery объединил бы два объекта, используя расширение.

пример

JSON 1:

{ ... "blah": { "params": { "foo": { "default": "bar", "misc": "0", ... }, ... }, ... }, ... } 

JSON 2:

 { ... "blah": { "params": { "foo": { "value": "val", "misc": "1", ... }, ... }, ... }, ... } 

Слияние

 { ... "blah": { "params": { "foo": { "default": "bar", "value": "val", "misc": "1", ... }, ... }, ... }, ... } 

Каков наилучший способ приблизиться к объектам PHP.

Декодирование каждой строки JSON в ассоциативный массив, объединение результатов и повторное кодирование

 $a1 = json_decode( $json1, true ); $a2 = json_decode( $json2, true ); $res = array_merge_recursive( $a1, $a2 ); $resJson = json_encode( $res ); 

Обновление. Если у вас есть конкретное требование слияния, вам нужно будет написать свою собственную функцию слияния. Я написал один ниже, который соответствует вашим требованиям, указанным в вопросе. Возможно, вам придется настроить его, если у вас есть другие требования, о которых вы не упомянули.

 <?php $json1 = ' { "blah": { "params": { "foo": { "default": "bar", "misc": "0" } }, "lost": { "one": "hat", "two": "cat" } } }'; $json2 = ' { "blah": { "lost": "gone", "params": { "foo": { "value": "val", "misc": "1" } } }, "num_array": [12, 52, 38] }'; $a1 = json_decode( $json1, true ); $a2 = json_decode( $json2, true ); /* * Recursive function that merges two associative arrays * - Unlike array_merge_recursive, a differing value for a key * overwrites that key rather than creating an array with both values * - A scalar value will overwrite an array value */ function my_merge( $arr1, $arr2 ) { $keys = array_keys( $arr2 ); foreach( $keys as $key ) { if( isset( $arr1[$key] ) && is_array( $arr1[$key] ) && is_array( $arr2[$key] ) ) { $arr1[$key] = my_merge( $arr1[$key], $arr2[$key] ); } else { $arr1[$key] = $arr2[$key]; } } return $arr1; } $a3 = my_merge( $a1, $a2); $json3 = json_encode( $a3 ); echo( $json3 ); /* { "blah": { "params": { "foo": { "default": "bar", "misc": "1", "value": "val" } }, "lost": "gone" }, "num_array": [12,52,38] } */ 

Используйте array-replace-recursive() http://www.php.net/manual/en/function.array-replace-recursive.php
Он делает именно то, что вы хотите.