数组排序是比较常见的功能,比如在获取数据必须根据id倒序是,显示又必须要按照正序就要二次排序,场景比如聊天信息的获取,在聊天框中实时获取最新数据就这样。还有其他情况,比如按某个数值的大小进行排序等。
这个函数比较好用,不用记录太多,不过只能对某个键key进行排序,不能同时处理多个数组(多个直接用array_multisort()函数):
/**
* 二维码数组排序
* @param $array array 数组
* @param $keys string 需要排序的键名
* @param string $type 排序类型,asc-正序,desc-倒序
* @return array
*/
function array_sort($array, $keys, $type='asc'){
$keysvalue = $new_array = array();
foreach ($array as $k => $v){
$keysvalue[$k] = $v[$keys];
}
if($type == 'asc'){
asort($keysvalue);
}else{
arsort($keysvalue);
}
reset($keysvalue);
foreach ($keysvalue as $k => $v){
$new_array[$k] = $array[$k];
}
return $new_array;
}
$abc = [
['id'=>1,'n'=>'b','s'=>'b'],
['id'=>2,'n'=>'aa','s'=>'c'],
['id'=>3,'n'=>'ac','s'=>'b'],
];
print_r(array_sort($abc,'n','asc'));
print_r(array_sort($abc,'id','desc'));
print_r(array_sort($abc,'s','desc'));
demo运行结果:
Array
(
[1] => Array
(
[id] => 2
[n] => aa
[s] => c
)
[2] => Array
(
[id] => 3
[n] => ac
[s] => b
)
[0] => Array
(
[id] => 1
[n] => b
[s] => b
)
)
Array
(
[2] => Array
(
[id] => 3
[n] => ac
[s] => b
)
[1] => Array
(
[id] => 2
[n] => aa
[s] => c
)
[0] => Array
(
[id] => 1
[n] => b
[s] => b
)
)
Array
(
[1] => Array
(
[id] => 2
[n] => aa
[s] => c
)
[0] => Array
(
[id] => 1
[n] => b
[s] => b
)
[2] => Array
(
[id] => 3
[n] => ac
[s] => b
)
)
另外用自定义的usort同样可以:
usort($abc, function ($a, $b) {
return $b['id'] - $a['id'];
});