我有这个数组:
$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);
小提琴