【问题标题】:sort multidimensional array using same array key in php [duplicate]在php中使用相同的数组键对多维数组进行排序[重复]
【发布时间】:2019-09-16 02:37:34
【问题描述】:

下面是我的多维数组: 我已经根据“等级”对数组进行了排序并得到了结果。 这个排序后的数组再次需要根据 'grade' 键对 'timetaken' 进行排序。

例如:有等级= 1.75,这应该按时间键排序。而grade= 2.50 应该更高,因为它高于1.75。

        $testing_data = array(
            0 => array(
                "fullname" => ' Shoping0000000000',
                "grade" => 2.5000,
                "timetaken" => 15
            ),
            1 => array(
                "fullname" => ' Vennapureddy',
                "grade" => 1.75000,
                "timetaken" => 13
            ),
            2 => array(
                "fullname" => ' Shoping1111111',
                "grade" => 1.75000,
                "timetaken" => 11
            ),
            3 => array(
                "fullname" => ' Shoping2222222',
                "grade" => 1.75000,
                "timetaken" => 90
            ),
            4 => array(
                "fullname" => ' Shoping333333333',
                "grade" => 1.7000,
                "timetaken" => 15
            ),

            5 => array(
                "fullname" => ' Azmeera',
                "grade" => 1.7000,
                "timetaken" => 67
            ),
            6 => array(
                "fullname" => 'Admin User',
                "grade" => 1.00,
                "timetaken" => 180
            ),
            7 => array(
                "fullname" => ' Shoping444444444444',
                "grade" => 1,
                "timetaken" => 15
            ),
            8 => array(
                "fullname" => ' Shoping55555555555555555',
                "grade" => 0.5000,
                "timetaken" => 290
            ),
            9 => array(
                "fullname" => ' Shoping6666',
                "grade" => 0.5000,
                "timetaken" => 120
            ),
            10 => array(
                "fullname" => ' Shoping77777',
                "grade" => 0.5000,
                "timetaken" => 187
            ),
            11 => array(
                "fullname" => ' Shoping888888',
                "grade" => 0.5000,
                "timetaken" => 20
            ),                                                                                                         
        );

我的结果数组应该是这样的:

        $testing_data = array(
            0 => array(
                "fullname" => ' Shoping0000000000',
                "grade" => 2.5000,
                "timetaken" => 15
            ),
            1 => array(
                "fullname" => ' Shoping1111111',
                "grade" => 1.75000,
                "timetaken" => 11
            ),
            2 => array(
                "fullname" => ' Vennapureddy',
                "grade" => 1.75000,
                "timetaken" => 13
            ),

            3 => array(
                "fullname" => ' Shoping2222222',
                "grade" => 1.75000,
                "timetaken" => 90
            ),
            4 => array(
                "fullname" => ' Shoping333333333',
                "grade" => 1.7000,
                "timetaken" => 15
            ),

            5 => array(
                "fullname" => ' Azmeera',
                "grade" => 1.7000,
                "timetaken" => 67
            ),
            6 => array(
                "fullname" => ' Shoping444444444444',
                "grade" => 1,
                "timetaken" => 15
            ),
            7 => array(
                "fullname" => 'Admin User',
                "grade" => 1.00,
                "timetaken" => 180
            ),
            8 => array(
                "fullname" => ' Shoping888888',
                "grade" => 0.5000,
                "timetaken" => 20
            ),              
            9 => array(
                "fullname" => ' Shoping6666',
                "grade" => 0.5000,
                "timetaken" => 120
            ),
            10 => array(
                "fullname" => ' Shoping77777',
                "grade" => 0.5000,
                "timetaken" => 187
            ),              
            11 => array(
                "fullname" => ' Shoping55555555555555555',
                "grade" => 0.5000,
                "timetaken" => 290
            ),

        );

【问题讨论】:

  • 我看不出这两个数组有什么区别
  • 不清楚您要做什么。从数据来看,您似乎希望按成绩降序排序,然后按时间升序排序。对吗?
  • 您尝试过array_ 的众多功能吗?
  • 重复帖子上的答案显示了一种按多个条件对数组进行排序的简单方法
  • usort比较表达式应该是$b['grade'] <=> $a['grade'] ?: $a['timetaken'] <=> $b['timetaken']

标签: php sorting multidimensional-array


【解决方案1】:
<?php
array_multisort($testing_data[0], SORT_NUMERIC, SORT_DESC,
                $testing_data[1], SORT_NUMERIC, SORT_ASC);
var_dump($testing_data);
?>

请参阅https://php.net/manual/en/function.array-multisort.php 的文档,示例 #2。

【讨论】:

    【解决方案2】:

    您需要使用 usort,这是一个通过用户定义的函数对数组进行排序的函数。比如:

    function cmp($a, $b)
    {
        if ($a["grade"] == $b["grade"]) {
            return 0;
        }
        return ($a["grade"] < $b["grade"]) ? -1 : 1;
    }
    
    usort($yourArray,"cmp")
    

    【讨论】:

      【解决方案3】:

      试试这个

      array_multisort(array_column($testing_data, 'grade'), SORT_DESC, SORT_NUMERIC, $testing_data);
      

      【讨论】:

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