我有一个巨大的阵列,我从BattleField Bad Company 2的API中提取,并且士兵统计数据可以作为一个多维数组拉出来,每个士兵都有一个内部阵列,但是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 )
答案 0 :(得分:3)
您可以使用usort()
按任何条件对数组进行排序答案 1 :(得分:3)
你走了。
$ playergoop是您提供的数组。
这个按子字段“排名”排序,但它按升序排序。如果您想降序,可以切换>到<。
function sorter($one, $two) {
return ($one['rank'] > $two['rank']);
}
usort($playergoop['players'], sorter);
答案 2 :(得分:3)
除了其他答案之外,如果您需要按动态字段排序(仅在运行时已知),您可以使用匿名函数并通过use
关键字将字段传递给该字段:
$field = "some_dynamic_value";
usort($rows, function($a, $b) use ($field) {
return strcmp($a[$field], $b[$field]);
});
答案 3 :(得分:2)
当您使用PHP 5.3及更高版本时,您可以使用匿名内联函数进行排序:
usort($obj, function ($a, $b)
{
return strcmp($a["name"], $b["name"]);
});
答案 4 :(得分:1)
为了命令降序数组,我使用了
function sorterdesc($one, $two) {
return ($two['cont'] - $one['cont']);
}
升序:
function sorterasc($one, $two) {
return ($one['cont'] - $two['cont']);
}
像这样,它可以正常使用数值
答案 5 :(得分:0)
您可以使用array_multisort
进行此操作:首先提供要排序的列-以array_column
和第二个参数作为整个数组。可能有几个选项(请参阅文档),但是对于按“等级”字段的升序排序,则看起来像这样:
array_multisort(array_column($players, "rank"), $players);
注意:对于此处实际问题中的数据,$players
将为&$arr["players"]