Php 如何使用相同的键将值从一个数组添加到另一个数组?

Php 如何使用相同的键将值从一个数组添加到另一个数组?,php,arrays,Php,Arrays,我有两个阵列: $arr1 = [ [ 'id' => 1, 'name' => 'John', 'email' => 'j@mail.com' ], [ 'id' => 2, 'name' => 'Jane', 'email' => 'jane@mail.com' ] ]; 第二个数组: $arr2 = [ [

我有两个阵列:

$arr1 = [
    [
        'id' => 1,
        'name' => 'John',
        'email' => 'j@mail.com'
    ],
    [
        'id' => 2,
        'name' => 'Jane',
        'email' => 'jane@mail.com'
    ]
];
第二个数组:

$arr2 = [
    [
        'id' => 1,
        'email' => 'john@yahoo.com'
    ],
    [
        'id' => 2,
        'email' => 'jane@yahoo.com'
    ],
    [
        'id' => 2,
        'email' => 'jane.doe@hotmail.com'
    ],
];
我想将第二个数组中具有相同“id”的所有值添加到第一个数组中。我预期的结果是:

$arr3 = [
    [
        'id' => 1,
        'name' => 'John',
        'email' => ['j@mail.com', 'john@yahoo.com']
    ],
    [
        'id' => 2,
        'name' => 'Jane',
        'email' => ['jane@mail.com', 'jane@yahoo.com', 'jane.doe@hotmail.com']
    ]
];

此代码将执行您想要的操作。它遍历
$arr2
的所有条目,在
$arr1
中查找匹配的
id
值,并在找到这些值的地方,将
$arr2
中的电子邮件地址添加到
$arr1
中的电子邮件列表中,以查找该
id
值:

foreach ($arr2 as $arr) {
    if (($k = array_search($arr['id'], array_column($arr1, 'id'))) !== false) {
        if (is_array($arr1[$k]['email'])) {
            $arr1[$k]['email'][] = $arr['email'];
        }
        else {
            $arr1[$k]['email'] = array($arr1[$k]['email'], $arr['email']);
        }
    }
}
输出:

Array (
    [0] => Array (
        [id] => 1 
        [name] => John
        [email] => Array (
            [0] => j@mail.com
            [1] => john@yahoo.com
        )
    )
    [1] => Array (
        [id] => 2
        [name] => Jane
        [email] => Array (
            [0] => jane@mail.com
            [1] => jane@yahoo.com
            [2] => jane.doe@hotmail.com
        )
    )
)

如果将第一个数组设置为键为ID的关联数组,则会更容易。然后你可以循环第二个数组,找到第一个数组的对应元素,并将电子邮件添加到其中。至少我们可以要求OP付出努力。