我想为几个关联数组提供一个独特的 sort 函数。
各种PHP排序函数中最好的候选者是uksort()
,(usort()
是理想的,但它会将数组键更改为数字索引(!))。
例如(使用更简单的数组)
function sorting_by_length_desc ($a, $b)
{
return strlen($GLOBALS['arr'][$b]) - strlen($GLOBALS['arr'][$a]);
}
$arr = ('chandler' => 'bing', 'monica' => 'lewinsky');
uksort($arr, 'sorting_by_length_desc');
将使$arr
成为
('monica' => 'lewinsky', 'chandler' => 'bing');
不影响按键。
那么如何对任何数组使用相同的排序函数,在代码中的不同位置调用uksort()
?例如$arr1
,$arr2
,...,$arrn
?
是否有必要使用另一个具有数组名称的全局var来分配给要排序的数组(在排序之前),并在sort函数中全局使用?
必须有别的东西,干净,对吧?
答案 0 :(得分:1)
您可以使用以下常用比较功能:
function sorting_by_length_desc ($a, $b) {
return strlen($b) - strlen($a);
}
同样uksort对键上的数组进行排序。那是你在找什么?
如果要对数值进行排序,保持键值关联,可以使用uasort。
答案 1 :(得分:0)
您可以通过uksort()函数实现此目标
$arr = array('chandler' => 'bing', 'monica' => 'lewinsky', 'name' => 'smallest one');
uksort($arr, function($a, $b) {
return strlen($a) - strlen($b);
});
$result = $arr;
结果(按数组键的最小字符串长度排序):
Array
(
[name] => smallest one
[monica] => lewinsky
[chandler] => bing
)