EDIT:对于任何可能遇到类似问题的人来说,这是通过采用konforce提供的答案并使用自定义排序功能进行调整来解决的:
function cmp($a, $b) {
if ($a[5] == $b[5]) {
return ($a[3] < $b[3]) ? -1 :1;
}
return ($a[5] > $b[5]) ? -1 : 1;
}
注意,$a[5] == $b[5]
不返回零。它被更改为检查谁的损失最大,然后按ASC顺序进行排序。我相信你甚至可以继续添加另一个if语句,以防他们遭受同样的损失。
最后,你所做的就是usort($ARRAY, "cmp");
和finito!!!
原始帖子
我很抱歉又提出了一个MD数组排序问题,但我就是不明白。我已经搜索了很多对于解决方案,尽管许多网站都提供了看似合乎逻辑的答案,但我仍然无法弄清楚。
我的问题是,由于我还在学习,我很难理解使用usort与自定义比较的概念作用至少,当其他人尝试对MD阵列进行排序时,我看到的最多的就是这种情况。
我正在做一个小项目来提高我的php技能。这是一个非常基本的锦标赛排名脚本,它将一支球队的信息保存在一个数组中。我想按大多数点对数组进行排序($array[X][X][5](。
所以数组看起来像这样:
Array (
[0] => Array (
[0] => Array (
[0] => cooller
[1] => 6
[2] => 6
[3] => 0
[4] => 0
[5] => 18
)
)
[1] => Array (
[0] => Array (
[0] => strenx
[1] => 9
[2] => 5
[3] => 1
[4] => 3
[5] => 18
)
)
[2] => Array (
[0] => Array (
[0] => rapha
[1] => 10
[2] => 8
[3] => 1
[4] => 1
[5] => 25
)
) [3] => Array (
[0] => Array (
[0] => ronald reagan
[1] => 5
[2] => 4
[3] => 0
[4] => 1
[5] => 13
)
)
)
我想按大多数点对它进行排序(单元格#5(,所以在排序后,它会像这样:
Array (
[0] => Array (
[0] => Array (
[0] => rapha
[1] => 10
[2] => 8
[3] => 1
[4] => 1
[5] => 25
)
)
[1] => Array (
[0] => Array (
[0] => cooller
[1] => 6
[2] => 6
[3] => 0
[4] => 0
[5] => 18
)
)
[2] => Array (
[0] => Array (
[0] => strenx
[1] => 9
[2] => 5
[3] => 1
[4] => 3
[5] => 18
)
)
[3] => Array (
[0] => Array (
[0] => ronald reagan
[1] => 5
[2] => 4
[3] => 0
[4] => 1
[5] => 13
)
)
)
得到25分的球员将位居榜首,其次是18分、18分,最后是13分。很抱歉我之前的帖子,我的问题措辞不正确。提前感谢!
我想你想要这样的东西:
usort($standings, function($a, $b) { return $b[0][5] - $a[0][5]; });
或者在PHP 5.3:之前
function cmp($a, $b) { return $b[0][5] - $a[0][5]; }
usort($standings, 'cmp');
当使用usort
时,$a
和$b
参数将是所提供阵列中的一个"层"。因此,在您的情况下,$a
或$b
的示例将是:
[0] => Array (
[0] => cooller
[1] => 6
[2] => 6
[3] => 0
[4] => 0
[5] => 18
)
我不知道为什么你在那里有一个额外的包含数组,但正如你所看到的,你想根据[0][5]
的位置进行排序。
usort($standings[0][0][5], 'cmp')
不起作用,因为第一个参数不是要排序的数组,它只是一个数字,即点。