I have an array in this format:
Array
(
[0] => Array
(
[text] => tests
[language] =>
[advertiserCompetitionScale] => 5
[avgSearchVolume] => 7480000
[lastMonthSearchVolume] => 9140000
)
[1] => Array
(
[text] => personality tests
[language] =>
[advertiserCompetitionScale] => 5
[avgSearchVolume] => 165000
[lastMonthSearchVolume] => 201000
)
[2] => Array
(
[text] => online tests
[language] =>
[advertiserCompetitionScale] => 5
[avgSearchVolume] => 246000
[lastMonthSearchVolume] => 301000
)
)
How can I sort an array in that format, in the descending order of the avgSearchVolume
field? Is there a built in function for this?
From stackoverflow
-
This might help: Sorting Arrays of Arrays
-
You'll have to use a custom callback function together with
usort()
.function cmp($a, $b) { if ($a['avgSearchVolume'] == $b['avgSearchVolume']) { return 0; } return ($a['avgSearchVolume'] > $b['avgSearchVolume']) ? -1 : 1; } usort($array, 'cmp');
Paul Dixon : While that will work, a comparison function should really return 0 if two elements being compared are equal.Stefan Gehrig : You're right Paul - but as the sort-order is undefined in case of equality, a better solution would be to introduce another comparison to remove this uncertainty. Edited the answer accordingly. -
Use usort and supply your own function to do the ordering, e.g.
function cmp($a, $b) { if ($a['avgSearchVolume'] == $b['avgSearchVolume']) { return 0; } return ($a['avgSearchVolume'] > $b['avgSearchVolume']) ? -1 : 1; } usort($array, "cmp");
-
Until PHP 5.3 this is the best function for sorting based on subkeys without making a new function for each key.
function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) { foreach ($array as $subarray) { $keys[] = $subarray[$subkey]; } array_multisort($keys, $sortType, $array); } sortBySubkey($arr, 'avgSearchVolume');
With PHP 5.3 you can make something like this, same function call as now.
function getSortVariable($sortType = SORT_ASC) { switch($sortType) { case SORT_ASC: return function ($a, $b) use ($subkey) { return strcmp($a[$subkey], $b[$subkey]); }; } } function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) { $sortFunction = getSortVariable($sortType); usort($array, $sortFunction($subkey)); }
0 comments:
Post a Comment