Сортировка PHP

Я пытаюсь сортировать ассоциативный массив, который имеет несколько значений для каждой записи.

Например

[0] => stdClass Object ( [type] => node [sid] => 158 [score] => 0.059600525242489 ) [1] => stdClass Object ( [type] => node [sid] => 247 [score] => 0.059600525242489 ) 

Я хочу, чтобы массив отсортировался по «оценке» (самый высокий балл – первый индекс)

Как мне это сделать?

Solutions Collecting From Web of "Сортировка PHP"

Используйте функцию usort с этой функцией сравнения:

 function cmpByScore($a, $b) { if ($a['score'] == $b['score']) { return 0; } return $a['score'] > $b['score'] ? 1 : -1; } usort($array, 'cmpByScore'); 

Если у вас есть PHP 5.3, вы можете использовать закрытие, чтобы сделать это немного более динамичным и красивым простым способом:

 function sortby(&$array, $key) { usort($array, function($a, $b) { return ($a[$key] - $b[$key]); }); } 

Также обратите внимание, что использование минуса в функции сортировки, как предложено как tj111, так и мной, будет ужасно ломаться, если вы также планируете сортировать строки. В этом случае подход Гумбо является отказоустойчивым.

Вы можете сделать это с usort функции usort . Вот краткий пример того, как вы могли это сделать.

 function sortByScore($a, $b) { return $a['score'] - $b['score']; //if a > b it will return positive, a < b will return negative, a == b returns 0 } usort($array, "sortByScore"); 

Примерный код, вставленный здесь. Проверьте этот URL: текст ссылки

 $data[] = array('volume' => 67, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 1); $data[] = array('volume' => 85, 'edition' => 6); $data[] = array('volume' => 98, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 6); $data[] = array('volume' => 67, 'edition' => 7); 

В этом примере мы будем заказывать по объему по убыванию, выпуск по возрастанию.

У нас есть массив строк, но array_multisort () требует массив столбцов, поэтому мы используем приведенный ниже код для получения столбцов, а затем выполните сортировку.

 // Obtain a list of columns foreach ($data as $key => $row) { $volume[$key] = $row['volume']; $edition[$key] = $row['edition']; } // Sort the data with volume descending, edition ascending // Add $data as the last parameter, to sort by the common key array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); 

Теперь набор данных будет отсортирован и будет выглядеть так:

 volume | edition -------+-------- 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7