按特定键排序多维数组

时间:2011-07-02 20:01:16

标签: php sorting multidimensional-array

编辑:对于可能会遇到类似问题的任何人,可以通过 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.对于我之前的帖子,我很难正确地写出我的问题。先谢谢!

2 个答案:

答案 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')不起作用,因为第一个参数不是要排序的数组,它只是一个数字,即点。