如何根据外部数组值优先级对多维PHP数组排序
我在PHP中有一个多维数组,看起来类似于:如何根据外部数组值优先级对多维PHP数组排序,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我在PHP中有一个多维数组,看起来类似于: $my_array_to_sort = [ "data" => [ [ "name" => "orange", "id" => 23423, ], [ "name" => "green"
$my_array_to_sort = [
"data" => [
[
"name" => "orange",
"id" => 23423,
],
[
"name" => "green",
"id" => 34343,
],
[
"name" => "red",
"id" => 65566,
],
],
];
我想根据名称对该数组重新排序,同时使用如下排序数组保留其结构和数据:
$priority = [
"red" => 1,
"orange" => 2,
"green" => 3,
];
这样,最终的排序将导致
Array
(
[data] => Array
(
[0] => Array
(
[name] => red
[id] => 65566
)
[1] => Array
(
[name] => orange
[id] => 23423
)
[2] => Array
(
[name] => green
[id] => 34343
)
)
)
这里的路怎么走?任何代码引用都将不胜感激。您不需要
uasort
,因为您不想在正在排序的数组中保留键。将$priority
数组传递给回调并根据每个条目名称的优先级进行排序即可:
usort($my_array_to_sort['data'], function ($a, $b) use ($priority) {
return $priority[$a['name']] - $priority[$b['name']];
});
print_r($my_array_to_sort);
输出:
Array
(
[data] => Array
(
[0] => Array
(
[name] => red
[id] => 65566
)
[1] => Array
(
[name] => orange
[id] => 23423
)
[2] => Array
(
[name] => green
[id] => 34343
)
)
)
要按相反顺序排序,只需更改return
表达式中变量的顺序:
usort($my_array_to_sort['data'], function ($a, $b) use ($priority) {
return $priority[$b['name']] - $priority[$a['name']];
});
这太好了。非常感谢。如果我需要按相反的顺序排序(最高优先级值优先,即3、2、1等)@yesinteractive只需反转参数比较,
返回$priority[$b['name']]-$priority[$a['name']]代码>它将被排序descending@Kevin谢谢你回复我的评论。我会用这个更新答案。是的,这回答了问题。泰姆