编辑:对于可能会遇到类似问题的任何人,可以通过 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阵列排序问题我很抱歉,但我只是没有得到它。我搜索了很多 对于一个解决方案,虽然许多网站提供了似乎合乎逻辑的答案,但我仍然无法弄明白。
我的问题是因为我还在学习,因此我很难掌握使用自定义比较的概念 功能。至少,这是我在其他人尝试对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.对于我之前的帖子,我很难正确地写出我的问题。先谢谢!
答案 0 :(得分:1)
我想你想要这样的东西:
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]
位置进行排序。
答案 1 :(得分:0)
usort($standings[0][0][5], 'cmp')
不起作用,因为第一个参数不是要排序的数组,它只是一个数字,即点。