как отсортировать многомерный массив по внутреннему ключу - PullRequest
4 голосов
/ 30 марта 2010

У меня есть этот огромный массив, который я извлекаю из API для BattleField Bad Company 2, и статистику солдат можно получить как многомерный массив с внутренним массивом для каждого солдата, однако API сортирует солдат по имя в алфавитном порядке, я хочу отсортировать их по рангу (это просто еще один ключ в этом массиве солдат). Я пытался выяснить это в течение нескольких дней, у кого-нибудь есть идеи? (т.е. отсортировать массив по $ arr [Players] [] [Rank]

вот немного массива

Array
(
    [players] => Array
        (
            [0] => Array
                (
                    [name] => bigjay517
                    [rank] => 29
                    [rank_name] => SECOND LIEUTENANT II
                    [veteran] => 0
                    [score] => 979440
                    [level] => 169
                    [kills] => 4134
                    [deaths] => 3813
                    [time] => 292457.42
                    [elo] => 319.297
                    [form] => 1
                    [date_lastupdate] => 2010-03-30T14:06:20+02:00
                    [count_updates] => 13
                    [general] => Array
                        (
                            [accuracy] => 0.332
                            [dogr] => 86
                            [dogt] => 166
                            [elo0] => 309.104
                            [elo1] => 230.849
                            [games] => 384
                            [goldedition] => 0
                            [losses] => 161
                            [sc_assault] => 146333
                            [sc_award] => 567190
                            [sc_bonus] => 35305
                            [sc_demo] => 96961
                            [sc_general] => 264700
                            [sc_objective] => 54740
                            [sc_recon] => 54202
                            [sc_squad] => 53210
                            [sc_support] => 70194
                            [sc_team] => 21215
                            [sc_vehicle] => 44560
                            [slevel] => 0
                            [spm] => 0
                            [spm0] => 0
                            [spm1] => 0
                            [srank] => 0
                            [sveteran] => 0
                            [teamkills] => 67
                            [udogt] => 0
                            [wins] => 223
                        )

Ответы [ 6 ]

3 голосов
/ 30 апреля 2014

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

$field = "some_dynamic_value";

usort($rows, function($a, $b) use ($field) {
    return strcmp($a[$field], $b[$field]);
});
3 голосов
/ 30 марта 2010

Вот, пожалуйста.

$ playergoop - это предоставленный вами массив.

Это сортирует по подполю 'rank', но делает это в порядке возрастания. Если вам нужен нисходящий порядок, вы можете переключить> на <. </p>

function sorter($one, $two) {
    return ($one['rank'] > $two['rank']);
}

usort($playergoop['players'], sorter);
3 голосов
/ 30 марта 2010

Вы можете отсортировать любой массив по любым критериям, используя usort ()

2 голосов
/ 11 октября 2016

Когда вы используете PHP 5.3 и выше, вы можете использовать анонимную встроенную функцию для сортировки:

usort($obj, function ($a, $b)
{
    return strcmp($a["name"], $b["name"]);
});
1 голос
/ 26 февраля 2014

Для заказа по убыванию массива я использовал

function sorterdesc($one, $two) {
    return ($two['cont'] - $one['cont']);
}

По возрастанию:

function sorterasc($one, $two) {
    return ($one['cont'] - $two['cont']);
}

Как это работает с числовыми значениями

0 голосов
/ 06 мая 2019

Вы можете использовать array_multisort для этого: сначала укажите столбец, который вы хотите отсортировать, с помощью array_column, а в качестве второго аргумента - весь массив. Возможны несколько вариантов (см. Документацию), но для сортировки по возрастанию по полю «ранг» это будет выглядеть так:

array_multisort(array_column($players, "rank"), $players);

Примечание: для данных в данном вопросе $players будет &$arr["players"]

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