Сортировка многомерного массива по числовому значению измерения, которое не является первым - PullRequest
3 голосов
/ 26 марта 2011

Я создаю возможность поиска для программы форума, которую я создаю. В какой-то момент у меня есть массив с именем searchResults, который является числовым и содержит «оценка» в качестве одного из его измерений (другие - «timeStarted», «authorUID» и «TID»)

Итак, этот массив находится в беспорядке, и мне нужно организовать его так, чтобы $ searchResults [1] будет самым высоким «счетом», а [2] будет вторым по величине и т. Д. Я посмотрел на array_multisort php.net, но быстро заблудился в том, как это работает. Итак, как бы мне отсортировать $ searchResults в числовом порядке (переставить ключи) по убыванию в порядке убывания дополнительного измерения 'sort' в качестве механизма сортировки? На самом деле нет никакого кода, который можно было бы использовать, но если вам нужна компоновка того, как выглядит массив, то вы идете:

$searchResults:
   [1] - ['timeStarted']
         ['authorUID']
         ['score']   <- Need to sort first dimension by this value descending
         ['TID']
   etc.

Спасибо за любую помощь.

Ответы [ 2 ]

5 голосов
/ 26 марта 2011

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

$cmp = function($a,$b) {return $b['score'] - $a['score'];};
usort($searchResults, $cmp);

В этом случае $ cmp - это функция, которая сравнивает два элемента $a и $b из $searchResults, основанные на значении ['Score'].$ cmp возвращает 0 для равенства, отрицательное значение val, если $a['score'] больше, положительное значение val, если $b['score'] больше.Обычно это происходит наоборот, но сортировка по убыванию желательна.

0 голосов
/ 26 марта 2011

Функция, которую вы хотите: usort . Посмотрите на пример № 2:

<?php
function cmp($a, $b)
{
    return strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";

usort($fruits, "cmp");

while (list($key, $value) = each($fruits)) {
    echo "\$fruits[$key]: " . $value["fruit"] . "\n";
}
?>

Выход:

$fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons
...