有关详细答案,为什么 array_multisort 不符合您的需求,请查看此答案:
PHP array_multisort not sort my multidimensional array as expected
简而言之:您希望根据预定义的顺序对数组进行排序。那里也给出了答案,但我也复制了一个解决方案来解决这个问题:
使用usortand array_flip,因此您可以将索引数组(ValueByPosition) 转换为PositionByValue数组。
$data = array(
"item1"=>"1",
"item2"=>"3",
"item3"=>"5",
"item4"=>"2",
"item5"=>"4"
);
usort($data, "sortByPredefinedOrder");
function sortByPredefinedOrder($leftItem, $rightItem){
$order = array("5","4","3","2","1");
$flipped = array_flip($order);
$leftPos = $flipped[$leftItem];
$rightPos = $flipped[$rightItem];
return $leftPos >= $rightPos;
}
print_r($data);
// usort: Array ( [0] => 5 [1] => 4 [2] => 3 [3] => 2 [4] => 1 )
// uasort: Array ( [item3] => 5 [item5] => 4 [item2] => 3 [item4] => 2 [item1] => 1 )
但是,这将要求您预测预定义订单数组中的所有可能项目,或以适当的方式将其他项目线程化。
如果要维护关联键,请使用uasort而不是usort.