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

时间:2015-06-16 21:20:51

标签: php arrays sorting

我有这个数组:

@android

这个数组:

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

我想要的是$order = array(33,12,50,19,4,1,100,18,9,2,7); 按照$categories prefined的方式进行排序。所以我需要的结果是:

$order

您可能已经注意到,$categories_sorted = array(33,12,19,4,1,7,10); 不在10。这是因为$order数组中从不包含所有类别,只有最重要的类别。 $order数组应始终包含$categories_sorted中的所有值,即使它们不在$categories中。

2 个答案:

答案 0 :(得分:0)

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

$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;
}

答案 1 :(得分:0)

您可以使用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);

Fiddle