我得到了这个数组,来自数据库。值的顺序可由用户更改
Array
(
[0] => 14
[1] => 15
[2] => 9
[3] => 13
[4] => 12
...
[n] => n
)
还有另一个数组,它将提取到浏览器中:
Array
(
[0] => Array
(
[id] => 1
...
[nr] => 9
...
)
[1] => Array
(
[id] => 2
...
[nr] => 12
...
)
[2] => Array
(
[id] => 3
...
[nr] => 15
...
)
[n] => Array
)
我需要找到一种方法,用nr
(不是id
)来对第二个数组进行排序,并且nr
的顺序来自第一个数组。
有什么想法吗?
答案 0 :(得分:2)
您可以翻转第一个数组以了解ID的顺序:
$order = array_flip($order);
然后,您只需使用usort即可根据之前的翻转数组对数组进行排序:
usort($array, static function(array $a, array $b) use ($order) {
return $order[$a['nr']] <=> $order[$b['nr']];
});
答案 1 :(得分:1)
您可以将值映射到键,然后使用该映射重新排序。
<?php
$order =
[
2,
5,
1
];
$items =
[
['o' => 1],
['o' => 5],
['o' => 2],
];
foreach($items as $k => $v) {
$map[$v['o']] = $k;
}
var_export($map);
foreach($order as $o) {
$k = $map[$o];
$result[$k] = $items[$k];
}
var_export($result);
输出:
array (
1 => 0,
5 => 1,
2 => 2,
)array (
2 =>
array (
'o' => 2,
),
1 =>
array (
'o' => 5,
),
0 =>
array (
'o' => 1,
),
)
假设存在一对一映射。