-1

below is my multidimensional array: I have already sorted array based on 'grade' and got the result. this sorted array again need to sort on 'timetaken' based on 'grade' key.

ex: have grade= 1.75, this should be sorted on timetaken key. And grade= 2.50 should be upper, because it is higher then 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
            ),                                                                                                         
        );

And my result array should be like:

        $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
            ),

        );

3 Answers3

1
<?php
array_multisort($testing_data[0], SORT_NUMERIC, SORT_DESC,
                $testing_data[1], SORT_NUMERIC, SORT_ASC);
var_dump($testing_data);
?>

See documentation at https://php.net/manual/en/function.array-multisort.php, example #2.

Alien Technology
  • 1,760
  • 1
  • 20
  • 30
0

You need to use usort, a function that sorts arrays via a user defined function. Something like:

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

usort($yourArray,"cmp")
Sethu
  • 1,299
  • 10
  • 13
0

Simply try this

array_multisort(array_column($testing_data, 'grade'), SORT_DESC, SORT_NUMERIC, $testing_data);
Rakesh Jakhar
  • 6,380
  • 2
  • 11
  • 20