У меня есть PHP-массив, который выглядит так: http://pastie.org/1346063 (см. Пример pastie для массива)
То, что я хочу сделать, – это перебрать этот массив в другой массив, который сортируется по каждому массиву [голосов] [POINTS], численному нисходящему. Массив с наивысшим значением [голосов] [ПУНКТ] будет первым, указанным в основном массиве.
Используя usort()
мы можем создать собственную функцию сравнения:
function cmp($a, $b) { if($a['votes']['POINTS'] == $b['votes']['POINTS']) { return 0; } return ($a['votes']['POINTS'] < $b['votes']['POINTS']) ? 1 : -1; } usort($array, 'cmp');
Результаты:
Используя тестовые данные с аналогичной структурой, такой как ваша:
Array ( [0] => Array ( [votes] => Array ( [UP] => 1 [DOWN] => 0 [POINTS] => 5 ) ) [1] => Array ( [votes] => Array ( [UP] => 1 [DOWN] => 0 [POINTS] => 4 ) ) [2] => Array ( [votes] => Array ( [UP] => 1 [DOWN] => 0 [POINTS] => 2 ) ) [3] => Array ( [votes] => Array ( [UP] => 1 [DOWN] => 0 [POINTS] => 1 ) ) )
Решение : –
Предположим, ваш массив хранится в переменной с именем $ data
Вы можете просто отсортировать свой многомерный массив с помощью array_multisort
foreach ($data as $key => $row) { $points[$key] = $row['votes']['points']; } // Sort the data with points descending array_multisort($points, SORT_DESC, $data);
Надеюсь это поможет.