在不使用任何循环的情况下使用另一个多维数组更新多维数组值
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
我有一个这样的旧数组:
$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