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

  • 相关阅读:
    Tomcat详解系列(3)
    Tomcat详解系列(2)
    Tomcat详解系列(1)
    常用开发库
    单元测试
    [MongoDB知识体系] 一文全面总结MongoDB知识体系
    问题记录:net::ERR_CERT_AUTHORITY_INVALID
    CSS+DIV特色开关按钮
    Jquery的Ajax简易优化思路
    CSS+DIV简易灯泡案例
  • 原文地址:https://www.cnblogs.com/eric-gao/p/3374629.html
Copyright © 2020-2023  润新知