PHP:组合并排序两个具有相同值的多维数组

PHP:组合并排序两个具有相同值的多维数组,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我在PHP中有两个多维数组,第一个是 [0] => [ 'id' => 123, 'name' => 'John' ], [1] => [ 'id' => 456, 'name' => 'Anna' ], [2] => [ 'id' => 789, 'name' => 'Mario' ] 第二个是这样的: [0] => [ 'id' => 123, 'position' => 3 ], [1] => [ 'id

我在PHP中有两个多维数组,第一个是

[0] => [
'id' => 123,
'name' => 'John'
],

[1] => [
'id' => 456,
'name' => 'Anna'
],

[2] => [
'id' => 789,
'name' => 'Mario'
]
第二个是这样的:

[0] => [
'id' => 123,
'position' => 3
],

[1] => [
'id' => 456,
'position' => 1
],

[2] => [
'id' => 789,
'position' => 2
]
[0] => [
'id' => 456,
'name' => 'Anna',
'position' => 1
],

[1] => [
'id' => 789,
'name' => 'Mario',
'position' => 2
],

[2] => [
'id' => 123,
'name' => 'John',
'position' => 3
]
我试图在不替换任何值的情况下获得两个数组的并集。我只想在第一个数组中添加'position',同时也按这个新值排序,如下所示:

[0] => [
'id' => 123,
'position' => 3
],

[1] => [
'id' => 456,
'position' => 1
],

[2] => [
'id' => 789,
'position' => 2
]
[0] => [
'id' => 456,
'name' => 'Anna',
'position' => 1
],

[1] => [
'id' => 789,
'name' => 'Mario',
'position' => 2
],

[2] => [
'id' => 123,
'name' => 'John',
'position' => 3
]

如何以最有效的方式实现这一结果?谢谢大家!

您可以构建一个将ID映射到位置的数组,然后循环遍历第一个名称(或一个副本),并添加位置

<?php
$names =
[
    [
        'id' => 123,
        'name' => 'John'
    ],
    [
        'id' => 456,
        'name' => 'Anna'
    ],
    [
        'id' => 789,
        'name' => 'Mario'
    ]
];

$positions =
[
    [
        'id' => 123,
        'position' => 3
    ],
    [
        'id' => 456,
        'position' => 1
    ],
    [
        'id' => 789,
        'position' => 2
    ]
];
$id_positions = array_column($positions, 'position', 'id');
$result = $names;
foreach($result as &$item) {
    $item['position'] = $id_positions[$item['id']] ?? null;
}
unset($item);

uasort($result, function($a, $b) { return $a['position'] <=> $b['position']; });
var_export($result);

使用这个extern PHP类,只需几行代码就可以解决许多类似的问题


谢谢,你的解决方案非常有效。我仍然需要按位置排序,在数组创建期间是否有任何方法可以这样做,或者我需要在创建之后对其进行排序?哦,原谅我,我没有阅读排序,我添加了一个post排序。