如何按内部键排序多维数组

5
我有一个庞大的数组,从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个回答

5

给你。

$playergoop是您提供的数组。

这个按子字段“rank”排序,但它以升序方式排序。如果您想要降序排序,可以将>更改为<。

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

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

4
除了其他回答之外,如果您需要按动态字段(仅在运行时已知)进行排序,则可以使用匿名函数并通过use关键字将其传递给该字段:
$field = "some_dynamic_value";

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

3

您可以使用usort()按任何标准对任何数组进行排序。


请参见下面的详细回复,了解如何完成此操作。 - Gabi Lee
usort()可以对任何数组进行排序,但它不一定会按预期返回每个数组。如果读者需要保持键关联等信息,介绍uasort()uksort()可能会有所帮助。 - slothluvchunk

2

当你使用PHP 5.3及以上版本时,你可以使用匿名内联函数进行排序:

usort($obj, function ($a, $b)
{
    return strcmp($a["name"], $b["name"]);
});

2
你可以使用array_multisort来实现:首先提供你想要排序的列--使用array_column,然后作为第二个参数提供整个数组。有几个选项可用(请参阅文档),但对于按“rank”字段进行升序排序,它将如下所示:
array_multisort(array_column($players, "rank"), $players);

NB:对于实际问题中的数据,$players应为&$arr["players"]


0

要对一个数组进行降序排序,我使用了

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

升序排列:

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

如果使用数字值,它可以正常工作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接