Cli*_*ote 61 php arrays sorting
我有这种格式的数组:
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
)
)
Run Code Online (Sandbox Code Playgroud)
如何按avgSearchVolume字段的降序排列该格式的数组?这有内置功能吗?
Pau*_*xon 104
使用usort并提供您自己的功能来进行排序,例如
function cmp($a, $b)
{
return $b['avgSearchVolume'] - $a['avgSearchVolume'];
}
usort($array, "cmp");
Run Code Online (Sandbox Code Playgroud)
OIS*_*OIS 18
在PHP 5.3之前,这是基于子键进行排序的最佳函数,而不为每个键创建新函数.
function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) {
foreach ($array as $subarray) {
$keys[] = $subarray[$subkey];
}
array_multisort($keys, $sortType, $array);
}
sortBySubkey($arr, 'avgSearchVolume');
Run Code Online (Sandbox Code Playgroud)
使用PHP 5.3,你可以制作类似这样的函数调用,就像现在一样.
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));
}
Run Code Online (Sandbox Code Playgroud)
您必须与自定义回调函数一起使用usort().
function cmp($a, $b)
{
if ($a['avgSearchVolume'] == $b['avgSearchVolume']) {
return 0;
}
return ($a['avgSearchVolume'] > $b['avgSearchVolume']) ? -1 : 1;
}
usort($array, 'cmp');
Run Code Online (Sandbox Code Playgroud)