詳細な回答については、array_multisort がニーズに合わない理由については、この回答をご覧ください:
PHP array_multisort not sort my multidimensional array as expected
つまり、定義済みの順序に基づいて配列を並べ替えたいとします。答えもそこにありますが、この答えにも1つの解決策をコピーしました:
とを使用usort
して、インデックス配列(ValueByPosition) をPositionByValuearray_flip
配列に変換できるようにします。
$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
ます。