开发者_如何学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
)
)
精彩评论