2010-03-30 2 views
3

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

здесь немного массива

 
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] =>
          [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 
         ) 

ответ

4

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

+0

увидеть мой развернутый ответ ниже ровно, как это сделать –

2

Здесь вы идете.

$ playergoop является массив, который вы предоставили.

это один сортирует подполе «ранга», но делает это в восходящем O rder. Если вы хотите по убыванию, вы можете переключить > на <.

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

usort($playergoop['players'], sorter); 
+1

+ 1, но это должно быть '$ one ['rank'] - $ two ['rank']', а не '>' – user187291

1

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

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

Для восходящего:

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

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

3

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

$field = "some_dynamic_value"; 

usort($rows, function($a, $b) use ($field) { 
    return strcmp($a[$field], $b[$field]); 
}); 
1

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

usort($obj, function ($a, $b) 
{ 
    return strcmp($a["name"], $b["name"]); 
}); 
Смежные вопросы