PHP的数组排序函数

<?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取出的数据是数组,但是需要排序,所以今天搞出一个对数组排序的函数。

原文地址:https://www.cnblogs.com/eric-gao/p/3374629.html