【问题标题】:PHP Sort Multidimensional Array Based on Multiple Criteria [duplicate]PHP基于多个条件对多维数组进行排序[重复]
【发布时间】:2015-12-20 01:19:48
【问题描述】:

我有一个多维数组,如下所示:

$arr=Array
(
    [0] => Array
        (
            [0] => TEAM1
            [1] => 3
            [2] => 0
            [3] => 422.47
            [4] => 192.62
        )

    [1] => Array
        (
            [0] => TEAM2
            [1] => 2
            [2] => 1
            [3] => 402.14
            [4] => 210.70
        )

    [2] => Array
        (
            [0] => TEAM3
            [1] => 3
            [2] => 0
            [3] => 376.79
            [4] => 174.64
        )
)

5 列与团队名称、# 胜、# 负、# 得分、# 反对。

如何按第 1 列(# Wins)(降序)、第 2 列(# Losses)(升序)和第 3 列(# of Pts For)(降序)对$arr 进行排序

【问题讨论】:

  • usort(),还有自定义比较函数...

标签: php arrays sorting multidimensional-array


【解决方案1】:

我找到了一个使用array_multisort()的解决方案

foreach ($arr as $key => $row) {
    $wins[$key] = $row[1]; 
    $losses[$key] = $row[2];
    $ptsfor[$key] = $row[3];
}
array_multisort($wins, SORT_DESC, $losses, SORT_ASC, $ptsfor, SORT_DESC, $arr);

【讨论】:

    【解决方案2】:

    相反,您可以简单地使用 usort 函数,如 as

    usort($arr, function($a,$b){
        if($a[1] != $b[1])
            return $b[1] - $a[1];
        else if($a[2] != $b[2])
            return $a[2] - $b[2];
        else if($a[3] != $b[3])
            return $b[3] - $a[3];
    });
    

    或者你可以像 as 一样使用它

    usort($arr,function($a,$b){
        $c = $b[1] - $a[1];
        $c .= $a[2] - $b[2];
        $c .= $b[3] - $a[3];
        return $c;
    });
    

    【讨论】:

    • 我认为我使用array_multisort() 的方法更容易理解,因为它清楚地显示了SORT_DESCSORT_ASC
    • 如果可以在单个函数中轻松完成,为什么要使用循环和函数
    • 看起来与stackoverflow.com/a/31693963/2943403 非常相似,但我不知道我是否喜欢将正数和潜在负数串联为字符串。
    【解决方案3】:

    你可以使用这个功能

        function sort_array($array, $sortkey, $order)
        {
            if ($order == "DESC")
                $or = "arsort";
            else
                $or = "asort";
            foreach ($array as $key => $array_row)
            {
                $sort_values[$key] = $array_row[$sortkey];
            }
            $or($sort_values);
            reset($sort_values);
            while (list ($arr_key, $arr_val) = each($sort_values))
            {
                $sorted_arr[] = $array[$arr_key];
            }
            return $sorted_arr;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 2019-07-05
      • 2013-05-02
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多