在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]
}
*/
以上是 在PHP中合并两个复杂的对象 的全部内容, 来源链接: utcz.com/qa/404522.html