使用 array_merge 丢失值

1 php arrays array-merge

我有一个数组:

{
  "zone1":{
    "foo1":"bar1",
    "foo2":"bar2",
    "foo3":"bar3",
    "foo4":"bar4"
  },
  "zone2":{
    "newfoo1":"newbar1",
    "newfoo2":"newbar2",
    "newfoo3":"newbar3",
    "newfoo4":"newbar4"
  },
  "zone3":{
    "morefoo1":"morebar1",
    "morefoo2":"morebar2",
    "morefoo3":"morebar3",
    "morefoo4":"morebar4"
  }
}
Run Code Online (Sandbox Code Playgroud)

我想将第二个数组与更新后的值合并:

{
  "zone1":{
    "foo1":"updatedbar1"
  },
  "zone3":{
    "morefoo2":"updatedbar2",
    "morefoo4":"updatedbar4"
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多东西,我现在使用的是这个php代码:

$array3 = array_merge($array1, $array2);
Run Code Online (Sandbox Code Playgroud)

但是这段代码给了我这个:

{
  "zone1":{
    "foo1":"updatedbar1"
  },
  "zone2":{
    "newfoo1":"newbar1",
    "newfoo2":"newbar2",
    "newfoo3":"newbar3",
    "newfoo4":"newbar4"
  },
  "zone3":{
    "morefoo2":"updatedbar2",
    "morefoo4":"updatedbar4"
  }
}
Run Code Online (Sandbox Code Playgroud)

我想要的只是用第二个数组上的值更新第一个数组,而不丢失任何数据。数组是json,它们来自json文件,但语言是PHP。

Ger*_*osi 5

您可以使用array_replace_recursive()

$array3 = array_replace_recursive($array1, $array2);
Run Code Online (Sandbox Code Playgroud)

它使用您的数据创建以下数组:

Array
(
    [zone1] => Array
        (
            [foo1] => updatedbar1
            [foo2] => bar2
            [foo3] => bar3
            [foo4] => bar4
        )

    [zone2] => Array
        (
            [newfoo1] => newbar1
            [newfoo2] => newbar2
            [newfoo3] => newbar3
            [newfoo4] => newbar4
        )

    [zone3] => Array
        (
            [morefoo1] => morebar1
            [morefoo2] => updatedbar2
            [morefoo3] => morebar3
            [morefoo4] => updatedbar4
        )

)
Run Code Online (Sandbox Code Playgroud)

在ideone上查看。