按特定键对多维数组进行排序



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

相关内容

  • 没有找到相关文章

最新更新