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

  • 相关阅读:
    字符流与字节流的区别
    向文件尾部追加内容
    Hashmap实现原理及扩容机制详解
    HashMap的put和get方法原理
    关于数字化工厂&智能工厂建设 IT 经验总结
    @所有人,网易数字+大会报名通道正式开启!
    WinForm程序打包1之快速入门
    解决安装.NET Framework不受信任的根证书
    Cannot resolve com.sun:tools:1.8.0 错误解决
    IDEA 2020报“java:程序包XXXX不存在”或“java:找不到符号”
  • 原文地址:https://www.cnblogs.com/eric-gao/p/3374629.html
Copyright © 2011-2022 走看看