按预定义顺序对 PHP 数组进行排序


Sorting a PHP array by a predefined order

我有这个数组:

$categories = array(1,19,4,33,10,7,12);

而这个数组:

$order = array(33,12,50,19,4,1,100,18,9,2,7);

我想要的是$categories$order prefined的方式进行排序。所以我需要的结果是:

$categories_sorted = array(33,12,19,4,1,7,10);

您可能已经注意到,10不在$order .这是因为 $order 数组中永远不会包含所有类别,只有最重要的类别。$categories_sorted数组应始终包含 $categories 中的所有值,即使它们不在 $sorted 中。

我希望这能实现你的挑战:

$categories = array(1, 19, 4, 33, 10, 7, 12);
$order = array(33, 12, 50, 19, 4, 1, 100, 18, 9, 2, 7);
$categories_sorted = array();
// first: sort what is in $categories based on $order
foreach($order as $key => $value) {
    if(in_array($value, $categories)) $categories_sorted[] = $value;
}
// then add what is in $categories but bot in $order
foreach($categories as $key => $value) {
    if(!in_array($value, $order)) $categories_sorted[] = $value;
}

你可以使用 php 的uasort函数作为

$categories = array(1, 19, 4, 33, 10, 7, 12);
$order = array(33, 12, 50, 19, 4, 1, 100, 18, 9, 2, 7);
uasort($categories, function($a, $b)use(&$order) {
    foreach ($order as $key => $value) {
        if ($a == $value) {
            return 0;
            break;
        }
        if ($b == $value) {
            return 1;
            break;
        }
    }
});
print_r($categories);

小提琴