Php 如何按内键对多维数组排序

Php 如何按内键对多维数组排序,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我有一个巨大的数组,我从战场坏连2的API中提取,士兵统计数据可以作为多维数组提取,每个士兵都有一个内部数组,但是API按字母顺序对士兵进行排序,我想按等级对他们进行排序(这只是士兵数组中的另一个键). 我已经想了好几天了,有人有什么想法吗? (即按$arr[players][[rank]对阵列进行排序) 这里是数组的一部分 Array ( [players] => Array ( [0] => Array (

我有一个巨大的数组,我从战场坏连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]=>阵列 ( [名称]=>bigjay517 [排名]=>29 [军衔姓名]=>二少尉 [老兵]=>0 [得分]=>979440 [级别]=>169 [杀死]=>4134 [死亡]=>3813 [时间]=>292457.42 [elo]=>319.297 [表格]=>1 [date_lastupdate]=>2010-03-30T14:06:20+02:00 [计数更新]=>13 [常规]=>阵列 ( [准确度]=>0.332 [dogr]=>86 [dogt]=>166 [elo0]=>309.104 [elo1]=>230.849 [游戏]=>384 [黄金版]=>0 [损失]=>161 [sc_突击]=>146333 [sc_奖]=>567190 [sc_奖金]=>35305 [sc_演示]=>96961 [sc_general]=>264700 [sc_目标]=>54740 [sc_侦察]=>54202 [sc_团队]=>53210 [sc_支持]=>70194 [sc_团队]=>21215 [sc_车辆]=>44560 [slevel]=>0 [spm]=>0 [spm0]=>0 [spm1]=>0 [srank]=>0 [sveteran]=>0 [teamkills]=>67 [udogt]=>0 [胜利]=>223 )
您可以使用

按任何条件对任何数组进行排序

$playergoop是您提供的数组


这一个按子字段“rank”排序,但它是按升序排序的。如果需要降序,可以将>切换到以对数组降序,我使用了

function sorterdesc($one, $two) {
    return ($two['cont'] - $one['cont']);
}
对于升序:

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

与此类似,它可以很好地处理数值

除其他答案外,如果需要按动态字段排序(仅在运行时已知),则可以使用匿名函数,并通过
use
关键字将字段传递给它:

$field = "some_dynamic_value";

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

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

usort($obj, function ($a, $b)
{
    return strcmp($a["name"], $b["name"]);
});
您可以使用以下方法:首先提供要排序的列—使用
array\u column
作为第二个参数,并将整个数组作为第二个参数。有几种可能的选项(请参阅文档),但对于“rank”字段的升序排序,它将如下所示:

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

注意:对于这里实际问题中的数据,
$players
将是
&$arr[“players”]

请参阅下面我的详细回答,了解具体操作方法
usort()
可以对任何数组进行排序,但它不一定会像预期的那样返回每个数组。让读者了解
uasort()可能会有所帮助
uksort()
以防需要维护密钥关联等。
array_multisort(array_column($players, "rank"), $players);