加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

在PHP中合并两个复杂的对象

发布时间:2020-05-25 09:39:14 所属栏目:PHP 来源:互联网
导读:我有两个从 JSON转换的数据对象.两者都非常复杂,我想以类似的方式将它们合并到jQuery将如何使用extends合并两个对象. 例 JSON 1: { ... blah: { params: { foo: { default: bar,

我有两个从 JSON转换的数据对象.两者都非常复杂,我想以类似的方式将它们合并到jQuery将如何使用extends合并两个对象.

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",...
}

使用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 );


/*
 * 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"
    },38]
}
*/

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读