递归合并两个关联的二维数组

问题描述 投票:0回答:1

如何根据两个二维数组共享的唯一值将一个数组合并到另一个二维数组中?

数组:

$arr1 = [
    "First" =>[
        "Name" => "John",
        "Id" => 123
    ],
    "Second" =>[
        "Name" => "Peter",
        "Id" => 45
    ]
];  

$arr2 = [
    "First" =>[
        "Age" => 34,
        "Id" => 123
    ],
    "Second" =>[
        "Age" => 24,
        "Id" => 45
    ]
];

$n = array_merge($arr1, $arr2);

var_dump $n 时的当前输出:

array(2) {
 ["First"]=>
   array(2) {
    ["Age"]=>
    int(34)
    ["Id"]=>
    int(123)
 }
 ["Second"]=>
  array(2) {
    ["Age"]=>
    int(24)
    ["Id"]=>
    int(45)
 }
}

所需输出:

array(2) {
 ["First"]=>
   array(2) {
    ["Name"]=>
    String("John")
    ["Age"]=>
    int(34)
    ["Id"]=>
    int(123)
 }
 ["Second"]=>
  array(2) {
    ["Name"]=>
    String("Peter")
    ["Age"]=>
    int(24)
    ["Id"]=>
    int(45)
 }
}

当然,仅仅通过合并两个数组并不能解决我的问题,但我只是想知道应该采取什么方法来做到这一点。

php arrays recursion multidimensional-array merge
1个回答
5
投票

假设您的数组结构如下,您可以使用

array_replace_recursive

$n = array_replace_recursive($arr1, $arr2);

小提琴:https://3v4l.org/IPGsl

有些人可能会说你可以使用

array_merge_recursive
,但不行。由于两个数组中都有相同的键 (
Id
),因此生成的数组将不会具有您期望的结构。但如果两个数组中有不同键 -
array_merge_recursive
也是一个选项。

© www.soinside.com 2019 - 2024. All rights reserved.