phpmultidimensional-arraynatsort

natsort multidemsional array


I have an multidimensional array like this:

array ([0] => array ([id] => 1 [name] => john doe [title] => Mr [days] => 10) 
[1] => array ([id] => 2 [name] => Joe Smith [title] => Dr [days] => 22) 
[2] => array ([id] => 3 [name] => John Jones [title] => Mr [days] => 3))

I need to sort the inner arrays so that the data is returned in natural order by the days key.

I.E like this:

array ([2] => array ([id] => 3 [name] => John Jones [title] => Mr [days] => 3)
[0] => array ([id] => 1 [name] => john doe [title] => Mr [days] => 10) 
[1] => array ([id] => 2 [name] => Joe Smith [title] => Dr [days] => 22))

I think what I need is a function that applies natsort to a multidimensional array by $key, but so far I haven't been able to find any functions that do anything other than standard sorting.

Any help?


Solution

  • What you want is usort.

    You can write a callback to do the comparison for you:

    usort($data, function($a, $b) {
        return ($a['days'] > $b['days'])
               ? 1 
               : ($a['days'] < $b['days'])
                 ? -1 
                 : 0;
    });
    

    Disclaimer: You need PHP 5.3.x for this to work, else you have to resort to create_function or predefine the compare function.