PHP的数组排序函数

时间:2023-06-18 13:19:38
<?php
class order{
/**
*
* 数组排序
* @param array $arr 例如:
* array (
array (
'deskId' => '460646',
'deskName' => '房间1',
'userCount' => '2',
'miniGold' => '100',
),
array (
'deskId' => '460647',
'deskName' => '房间2',
'userCount' => '1',
'miniGold' => '100',
)
);
* @param string $order_by 根据哪个字段排序,如多个字段,用逗号隔开,有先后顺序。
* 例如:userCount:desc,serverPort,miniGold:asc
* 冒号前:数组字段,冒号后:排序规则(排序规则不用区分大小写)
* 如排序规则未填,默认DESC
*
*/
function quick_sort($arr=array(),$order_by=NULL){
$order_arr = array();
$type_arr = array();
if(count($arr)<=1) return $arr;//如果个数不大于一,直接返回
if(is_string($order_by)){
$order_arr = explode(',', $order_by);
if(is_array($order_arr)){
foreach ($order_arr as $k=>$v){
$o_arr = explode(':', $v);
$order_arr[$k] = isset($o_arr[0])?$o_arr[0]:'desc';
$type_arr[$k] = isset($o_arr[1])?$o_arr[1]:'desc';
}
}else{
exit('param format error!');
}
}
$left_arr=array();
$right_arr=array();
for($i=1;$i<count($arr);$i++){
$cnt = count($order_arr);
foreach ($type_arr as $t_key=>$t_val){
$type = strtolower($t_val);
$order_by = $order_arr[$t_key];
$key=$arr[0][$order_by];
if($type == 'asc'){
//从小到大
if($arr[$i][$order_by]<$key){
$left_arr[]=$arr[$i];break;
}else if($arr[$i][$order_by]>$key){
$right_arr[]=$arr[$i];break;
}else{
if($cnt == $t_key+1){ //最后的排序未符合规则
$right_arr[]=$arr[$i];
}
continue;
}
}else{
//从大到小
if($arr[$i][$order_by]>$key){
$left_arr[]=$arr[$i];break;
}else if($arr[$i][$order_by]<$key){
$right_arr[]=$arr[$i];break;
}else{
if($cnt == $t_key+1){ //最后的排序未符合规则
$left_arr[]=$arr[$i];
}
continue;
}
}
}
}
$left_arr = $this->quick_sort($left_arr,$order_by,$type);
$right_arr = $this->quick_sort($right_arr,$order_by,$type);
return array_merge($left_arr,array($arr[0]),$right_arr);
}
}

redis取出的数据是数组,但是需要排序,所以今天搞出一个对数组排序的函数。