phparrayssortingmultidimensional-array

How do I sort a multidimensional array by one of the fields of the inner array in PHP?


Suppose I have an array that mimics a database table. Each array element represents a row, and within each row is another array that contains the field names and values.

Array
(
    [0] => Array
        (
            [name] => 'Sony TV'
            [price] => 600.00
        )

    [1] => Array
        (
            [name] => 'LG TV'
            [price] => 350.00
        )

    [2] => Array
        (
            [name] => 'Samsung TV'
            [price] => 425.00
        )  
}

What I want to do is sort the rows (outer array elements) by price. Below is an example of what I want to achieve:

Array
(
    [0] => Array
        (
            [name] => 'LG TV'
            [price] => 350.00
        )

    [1] => Array
        (
            [name] => 'Samsung TV'
            [price] => 425.00
        )

    [2] => Array
        (
            [name] => 'Sony TV'
            [price] => 600.00
        )        
}

As you can see, I don't need to preserve the keys of the outer array.


Solution

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

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