Сортировка массива с использованием нескольких критериев в PHP

Я знаю, что есть некоторые другие темы по сортировке с несколькими критериями, но они не устраняют мою проблему. Предположим, у меня есть этот массив:

Array ( [0] => Array ( [uid] => 1 [score] => 9 [endgame] => 2 ) [1] => Array ( [uid] => 2 [score] => 4 [endgame] => 1 ) [2] => Array ( [uid] => 3 [score] => 4 [endgame] => 100 ) [3] => Array ( [uid] => 4 [score] => 4 [endgame] => 70 ) ) 

Я хочу сортировать его, поставив его с ВЫСОКОЙ оценкой сверху. На том же счете я хочу тот, у которого самый низкий номер эндшпиля сверху. Механизм сортировки должен оценивать user1 сверху, затем user2, затем 4, а затем user3.

Я использую этот механизм сортировки:

 function order_by_score_endgame($a, $b) { if ($a['score'] == $b['score']) { // score is the same, sort by endgame if ($a['endgame'] == $b['endgame']) return 0; return $a['endgame'] == 'y' ? -1 : 1; } // sort the higher score first: return $a['score'] < $b['score'] ? 1 : -1; } usort($dummy, "order_by_score_endgame"); 

Это дает мне следующий массив:

 Array ( [0] => Array ( [uid] => 1 [score] => 9 [endgame] => 2 ) [1] => Array ( [uid] => 3 [score] => 4 [endgame] => 100 ) [2] => Array ( [uid] => 2 [score] => 4 [endgame] => 1 ) [3] => Array ( [uid] => 4 [score] => 4 [endgame] => 70 ) ) 

Как вы можете видеть, массив не отсортирован правильно … Кто-нибудь знает, что я делаю неправильно? Большое спасибо!

Ваша функция должна быть такой:

 function order_by_score_endgame($a, $b){ if ($a['score'] == $b['score']) { // score is the same, sort by endgame if ($a['endgame'] > $b['endgame']) return 1; } // sort the higher score first: return $a['score'] < $b['score'] ? 1 : -1; } 

Попробуйте. Это даст вам результат следующим образом:

 Array ( [0] => Array ( [uid] => 1 [score] => 9 [endgame] => 2 ) [1] => Array ( [uid] => 2 [score] => 4 [endgame] => 1 ) [2] => Array ( [uid] => 4 [score] => 4 [endgame] => 70 ) [3] => Array ( [uid] => 3 [score] => 4 [endgame] => 100 ) )