learner
learner

Reputation: 2129

How can I sort a multidimensional array using php?

Hi I have to sort this array in desc. order on the basis of ratingVal using php. How can I do that.

Array
(
    [0] => Array
        (
            [rating_postid] => 26
            [raCnt] => 6
            [sRate] => 18
            [ratingVal] => 3
        )

    [1] => Array
        (
            [rating_postid] => 714
            [raCnt] => 3
            [sRate] => 14
            [ratingVal] => 4.6666666666667
        )

    [2] => Array
        (
            [rating_postid] => 14
            [raCnt] => 4
            [sRate] => 12
            [ratingVal] => 3
        )

    [3] => Array
        (
            [rating_postid] => 290
            [raCnt] => 2
            [sRate] => 10
            [ratingVal] => 5
        )

    [4] => Array
        (
            [rating_postid] => 194
            [raCnt] => 2
            [sRate] => 8
            [ratingVal] => 4
        )

    [5] => Array
        (
            [rating_postid] => 134
            [raCnt] => 2
            [sRate] => 6
            [ratingVal] => 3
        )

    [6] => Array
        (
            [rating_postid] => 707
            [raCnt] => 1
            [sRate] => 5
            [ratingVal] => 5
        )

)

Upvotes: 0

Views: 2472

Answers (3)

Harmen
Harmen

Reputation: 22438

Use usort:

function sortIt( $a, $b ){
    return $b['ratingVal'] - $a['ratingVal'];
}

usort( $yourArray, "sortIt" );

For ascending order, swap the $a and $b in the subtraction.

The usort function allows you to create your own custom sort function

Upvotes: 3

lonesomeday
lonesomeday

Reputation: 237865

You've tagged your code "php5.3", so I'm going to give a 5.3-specific answer.

Adapting Harmen's code:

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

This uses usort and anonymous functions, a new addition in PHP 5.3.

Upvotes: 1

Kel
Kel

Reputation: 7780

If you retrieve this data from mysql database (as I see, mysql tag is specified), you may use ORDER BY statement in your query.

If this is not suitable, you'll have to implement comparison function and use usort() function.

Upvotes: 1

Related Questions