PHP:组合并排序两个具有相同值的多维数组
我在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
[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排序。