在不使用任何循环的情况下使用另一个多维数组更新多维数组值

Update multidimensional array values with another multidimensional array without using any loop

我有一个这样的旧数组:

$oldArray = [
    [
        'id' => 123,
        'name' => 'abc',
    ],
    [
        'id' => 456,
        'name' => 'def',
    ]
];

我有一个这样的新数组:

$newArray = [
    [
        'id' => 456,
        'name' => 'ghi',
    ],
    [
        'id' => 789,
        'name' => 'jkl',
    ],
];

我想要这样的结果:

$updatedArray = [
    [
        'id' => 123,
        'name' => 'abc',
    ],
    [
        'id' => 456,
        'name' => 'ghi',
    ],
    [
        'id' => 789,
        'name' => 'jkl',
    ],
];

那应该匹配 id 并给我一个结果数组。

我只想使用array functions来完成这个技巧。

我使用了如下代码,但它不起作用:

$mergedVariants = array_merge($newArray, $oldArray);
$updatedArray = array_unique($mergedVariants);

需要数组$newArray和$oldArray,id为key。 array_column 这样做。然后可以使用array_replace_recursive()。

$old = array_column($oldArray,null,'id');
$new = array_column($newArray,null,'id');
$updatedArray = array_values(array_replace_recursive($old, $new));

如果没有 array_values(),结果数组将 'id' 作为键。 array_replace() 对于这种情况也足够了。

自己试试:3v4l.org