Сортировка многомерного массива по определенному ключу - PullRequest
1 голос
/ 03 июля 2011

РЕДАКТИРОВАТЬ : Для тех, кто может столкнуться с этим сообщением с похожей проблемой, эта проблема была решена путем использования предоставленного konforce ответа и небольшого изменения пользовательской функции сортировки :

function cmp($a, $b) {
    if ($a[5] == $b[5]) {
        return ($a[3] < $b[3]) ? -1 :1;
    }
    return ($a[5] > $b[5]) ? -1 : 1;
}

Уведомление $a[5] == $b[5] не возвращает ноль. Он был изменен, чтобы проверить, у кого больше всего потерь, а затем отсортировать его в порядке ASC. Я уверен, что вы даже можете продолжать и добавить еще одно if-утверждение, если у них те же потери.

Наконец, все, что вы делаете, это usort($ARRAY, "cmp"); и finito !!!

Исходное сообщение

Приношу свои извинения за то, что предложил еще один вопрос сортировки массива MD, но я просто не понимаю. Я искал много для решения, и хотя многие сайты предоставили то, что казалось логичным ответом, я все еще не смог понять это.

Моя проблема в том, что я все еще учусь, мне было довольно сложно понять концепцию использования usort с пользовательским сравнением. функция. По крайней мере, это то, что я видел больше всего, когда другие пытались сортировать массивы MD.

Я работаю над небольшим проектом, чтобы улучшить мои навыки работы с PHP. Это очень простой сценарий турнирной таблицы, который содержит информацию о команде в массиве. Я хотел бы отсортировать массив по большинству точек ($ array [X] [X] [5]).

Итак, массив выглядит примерно так:

Array (
        [0] => Array (
            [0] => Array (
                [0] => cooller
                [1] => 6 
                [2] => 6 
                [3] => 0 
                [4] => 0 
                [5] => 18 
            )
        ) 
        [1] => Array (
            [0] => Array (
                [0] => strenx 
                [1] => 9 
                [2] => 5 
                [3] => 1 
                [4] => 3 
                [5] => 18
            )
        )
        [2] => Array (
            [0] => Array (
                [0] => rapha
                [1] => 10
                [2] => 8
                [3] => 1
                [4] => 1
                [5] => 25
            )
        ) [3] => Array (
            [0] => Array (
                [0] => ronald reagan
                [1] => 5 
                [2] => 4 
                [3] => 0 
                [4] => 1 
                [5] => 13
            )
        )
    )

Я бы хотел отсортировать его по большинству точек (ячейка № 5), чтобы он выглядел следующим образом после сортировки:

Array (
        [0] => Array (
            [0] => Array (
                [0] => rapha
                [1] => 10
                [2] => 8
                [3] => 1
                [4] => 1
                [5] => 25
            )
        )
        [1] => Array (
            [0] => Array (
                [0] => cooller
                [1] => 6 
                [2] => 6 
                [3] => 0 
                [4] => 0 
                [5] => 18 
            )
        ) 
        [2] => Array (
            [0] => Array (
                [0] => strenx 
                [1] => 9 
                [2] => 5 
                [3] => 1 
                [4] => 3 
                [5] => 18
            )
        )
        [3] => Array (
            [0] => Array (
                [0] => ronald reagan
                [1] => 5 
                [2] => 4 
                [3] => 0 
                [4] => 1 
                [5] => 13
            )
        )
    )

Игрок с 25 очками будет наверху, затем 18, 18 и, наконец, 13. Извините за мой предыдущий пост, ему было трудно правильно сформулировать мой вопрос. Спасибо заранее!

Ответы [ 2 ]

1 голос
/ 03 июля 2011

Я думаю, вы хотите что-то вроде этого:

usort($standings, function($a, $b) { return $b[0][5] - $a[0][5]; });

Или до PHP 5.3:

function cmp($a, $b) { return $b[0][5] - $a[0][5]; }
usort($standings, 'cmp');

При использовании usort, параметров $a и $bбудет один «слой» в предоставленном массиве.Так что в вашем случае, пример $a или $b будет выглядеть следующим образом:

[0] => Array (
         [0] => cooller
         [1] => 6 
         [2] => 6 
         [3] => 0 
         [4] => 0 
         [5] => 18 
)

Я не уверен, почему у вас там есть дополнительный массив, но, как вы можете видеть, вы хотитесортировка по позиции [0][5].

0 голосов
/ 03 июля 2011

usort($standings[0][0][5], 'cmp') не будет работать, потому что первый параметр - это не массив для сортировки, это просто одно число, точки.

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