开发者

natsort multidemsional array [duplicate]

开发者 https://www.devze.com 2023-01-16 02:52 出处:网络
This question already has answers here: How to Sort a Multi-dimensional Array by Value (16 answers) Closed 3 months ago.
This question already has answers here: How to Sort a Multi-dimensional Array by Value (16 answers) Closed 3 months ago.

开发者_如何学GoI 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?


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.


The following worked for me,

usort($array, function($a, $b) {
    return strnatcasecmp($a['days'], $b['days']);
});

Found from here :- https://learntech.imsu.ox.ac.uk/blog/php-naturally-sorting-multidimension-arrays-by-string-values/

Hope someone will find this useful.


A bit of a different approach:

$days = array();
foreach($array as $key => $val) {
    $days[$key] = $val['days'];
}
array_multisort($days, $array); //$array being your input array

Result:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Jay Doe
            [title] => Mr
            [days] => 3
        )

    [1] => Array
        (
            [id] => 1
            [name] => John Doe
            [title] => Mr
            [days] => 10
        )

    [2] => Array
        (
            [id] => 2
            [name] => Joe Doe
            [title] => Mr
            [days] => 22
        )

)
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号