在不覆盖密钥的情况下合并JSON数组

时间:2014-03-30 12:02:36

标签: php arrays

我有一个从couchdb获取的JSON数组:

array(15) {
  ["_id"]=>
  string(15) "Axt"
  ["_rev"]=>
  string(34) "bd5137cbb8004e1a"
  ["api_rev"]=>
  string(3) "1.0"

  ["links"]=>
  array(1) {
    [3]=>
    array(5) {
      ["type"]=>
      string(8) "Assom"
      ["attribute"]=>
      string(0) "kkk"
    }
  }

现在我必须通过在“链接”中添加另一个数组来更新此文档:

我有例如$ updatearr的数组是:

["links"]=>
  array(1) {
    [3]=>
    array(5) {
      ["type"]=>
      string(8) "Mooa"
      ["attribute"]=>
      string(0) "okk"
    }
  }

当我尝试通过执行array_merge进行合并时,新更新会覆盖旧的“链接”。如果要添加新的链接类型和属性,我实际想要的是什么。

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

$array['links'][] = $updatearr['links'][0];

如果$ updatearr中有更多条目,并且您想要全部添加它们,您可以迭代它们并添加如上所示:

foreach ($updatearr['links'] as $link) {
  $array['links'][] = $link;
}

如果要合并更多的子数组,最好使用array_merge,但要使用子数组:

$array['links'] = array_merge($array['links'], $updatearr['links']);
$array['locations'] = array_merge($array['locations'], $updatearr['locations']);