合并两个JSON覆盖PHP中不同的嵌套对象[重复]

n3h0vuf2  于 2023-06-04  发布在  PHP
关注(0)|答案(1)|浏览(122)

此问题已在此处有答案

How to merge two multidimensional arrays without overwriting existing keys in PHP?(3个答案)
3天前关闭。
我有两个嵌套对象的json对象,我需要将它们合并到一个对象中,用第二个对象中的值覆盖原始值。
第一个JSON

{
   "field 1" : {
      "key 1": "value 1",
      "key 2": {
         "subkey 1": "subvalue 1",
         "subkey 2": "subvalue 2"
      },
      "key 3": "value 3"
   },
   "field 2": {
      "key 4": "value 4",
      "key 5": "value 5"
   },
   "field 3": {
      "key6": "value 6"
   }
}

第二个JSON,只包含与第一个JSON值不同的字段

{
   "field 1" : {
      "key 1": "value 10",
      "key 2": {
         "subkey 2": "subvalue 20"
      }
   },
   "field 2": {
      "key 4": "value 40"
   }
}

预期结果,第一个JSON的值修改了第二个JSON

{
   "field 1" : {
      "key 1": "value 10",
      "key 2": {
         "subkey 1": "subvalue 1",
         "subkey 2": "subvalue 20"
      },
      "key 3": "value 3"
   },
   "field 2": {
      "key 4": "value 40",
      "key 5": "value 5"
   },
   "field 3": {
      "key6": "value 6"
   }
}

我已经尝试过array_merge,但是当它在两个对象中找到相同的键时,用第二个的值替换第一个的值。在这种情况下,结果是来自第二JSON的字段1和字段2以及来自第一JSON的字段3。
Array_merge_recursive则将第二个值添加到第一个值中,例如,对于“key1”,值变为

"[value 1, value 10]"

有什么帮助吗?
Ps.在这个例子中,我使用了只有两个级别的JSON对象,但也可以有更多级别

sbtkgmzw

sbtkgmzw1#

我认为你希望数组替换而不是合并。

<?php
$j1 = '{
   "field 1" : {
      "key 1": "value 1",
      "key 2": {
         "subkey 1": "subvalue 1",
         "subkey 2": "subvalue 2"
      },
      "key 3": "value 3"
   },
   "field 2": {
      "key 4": "value 4",
      "key 5": "value 5"
   },
   "field 3": {
      "key6": "value 6"
   }
}';

$j2 = '{
    "field 1" : {
       "key 1": "value 10",
       "key 2": {
          "subkey 2": "subvalue 20"
       }
    },
    "field 2": {
       "key 4": "value 40"
    }
 }';

$a1 = json_decode($j1, true);

$a2 = json_decode($j2, true);

$a = array_replace_recursive($a1, $a2);
print_r( json_encode($a, JSON_PRETTY_PRINT));
?>

输出

{
    "field 1": {
        "key 1": "value 10",
        "key 2": {
            "subkey 1": "subvalue 1",
            "subkey 2": "subvalue 20"
        },
        "key 3": "value 3"
    },
    "field 2": {
        "key 4": "value 40",
        "key 5": "value 5"
    },
    "field 3": {
        "key6": "value 6"
    }
}

检查https://www.php.net/manual/en/function.array-replace-recursive

相关问题