Сортировка массива и сохранение значений ключей

У меня есть массив, который выглядит так:

Array ( [team1] => Array ( [points] => 10 [players] => Array ( ... ) ) [team2] => Array ( [points] => 23 [players] => Array ( ... ) ) ... many more teams ) 

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

 function sort_by_points($a,$b) { if ($a['points']==$b['points']) return 0; return ($a['points']<$b['points'])?1:-1; } usort($this->wordswithdata, "sortbycount"); 

Но этот подход отменяет ключи, содержащие имена команд и возвращает:

 Array ( [0] => Array ( [points] => 23 [players] => Array ( ... ) ) [1] => Array ( [points] => 10 [players] => Array ( ... ) ) etc... ) 

Есть ли способ отсортировать массив без перезаписи имен команд в виде ключей массива?

Related of "Сортировка массива и сохранение значений ключей"

Используйте функцию uasort , которая должна поддерживать целостность ключей => значение.

(обратите внимание: вы можете return $a['points'] - $b['points'] вместо ifs)

Вы можете использовать uasort :

 uasort($array, function($a, $b) { return $a['points'] - $b['points']; }); 

Эта функция сортирует массив таким образом, что индексы массива сохраняют свою корреляцию с элементами массива, с которыми они связаны, используя пользовательскую функцию сравнения.

Попробуйте этот код, надеюсь, он сработает.

 function aasort (&$array, $key) { $sorter=array(); $ret=array(); reset($array); foreach ($array as $ii => $va) { $sorter[$ii]=$va[$key]; } asort($sorter); foreach ($sorter as $ii => $va) { $ret[$ii]=$array[$ii]; } $array=$ret; } aasort($your_array,"points");