如何通过内部键对多维数组进行排序

时间:2010-03-30 13:30:46

标签: php arrays sorting multidimensional-array

我有一个巨大的阵列,我从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
                        )

6 个答案:

答案 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"]