Как отсортировать многомерный массив по значению? - PullRequest
3 голосов
/ 19 июля 2010

У меня есть следующий массив, и я хочу упорядочить этот массив по значению ключа «атака».Первые ключи массивов (15, 13, 18) являются идентификатором некоторого определенного элемента из базы данных, поэтому я не хочу, чтобы эти ключи изменялись при сортировке массива.Любая помощь будет принята с благодарностью.

Это массив:

$data = array(
    '15' => array(
        'attack' => '45', 'defence' => '15', 'total' => '10'
    ),
    '13' => array(
        'attack' => '25', 'defence' => '15', 'total' => '10'
    ),
    '18' => array(
        'attack' => '35', 'defence' => '15', 'total' => '10'
    )
);

Ответы [ 2 ]

13 голосов
/ 19 июля 2010

Использование uasort():

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

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

Пример:

function cmp($a, $b) {
    if ($a['attack'] == $b['attack']) {
        return 0;
    }
    return ($a['attack'] < $b['attack']) ? -1 : 1;
} 

uasort($data, 'cmp');

Если значения всегда являются строкамиВы также можете использовать strcmp() в функции cmp():

function cmp($a, $b) {
    return strcmp($a['attack'], $b['attack']);
} 

Обновление:

Для сортировки в порядке убывания выпросто нужно изменить возвращаемые значения:

return ($a['attack'] < $b['attack']) ? 1 : -1;
//                                     ^----^

или забрать предложение @ salathe:

return $b['attack'] - $a['attack'];
3 голосов
/ 09 мая 2011

Просто используйте array_multisort

foreach ($data as $key => $row) {
    $attack[$key]  = $row['attack'];
}

// Sort the data with attack descending
array_multisort($attack, SORT_DESC, $data);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...