如何根据外部数组值优先级对多维PHP数组排序

如何根据外部数组值优先级对多维PHP数组排序,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我在PHP中有一个多维数组,看起来类似于: $my_array_to_sort = [ "data" => [ [ "name" => "orange", "id" => 23423, ], [ "name" => "green"

我在PHP中有一个多维数组,看起来类似于:

$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谢谢你回复我的评论。我会用这个更新答案。是的,这回答了问题。泰姆