zoukankan      html  css  js  c++  java
  • php复杂排序 多个条件 多个排序策略排序

    /****
         * 对传入的大赛列表进行排序
         * @param $match_list
         * @return array
         */
        public function orderMatchList($match_list)
        {
            if (!$match_list) {
                return array();
            }
            $statu_arr = $sort1_arr=$sort2_arr = array();
            foreach ($match_list as $v) {
                list($statu_arr[],$sort1_arr[],$sort2_arr[])=self::getMatchStatus($v);
            }
            array_multisort($statu_arr, SORT_ASC, $sort1_arr, SORT_DESC,$sort2_arr,SORT_ASC, $match_list);
            return $match_list;
        }
    
        /**
         * 传入单个数据判断大赛状态和排序状态值
         * @param $data 单个大赛数据
         * @return array 返回大赛状态和排序条件值
         */
        private function getMatchStatus($data)
        {
            if (!$data) {
                return array(6, 6, 6);
            }
            //状态码:未开始1 已开赛2 已结束3
            //排序分为四个部分
            //已开赛(状态为2且时间处于范围内)后台sort降序     sort降序、
            //练习场(sort为0)             后台match_id升序
            //未开赛(状态码为1)            后台排序sort升序 开赛时间升序、
            //已结束(状态码为3)            后台sort降序    结束时间降序
            //统一规则 第一code状态码升序    第二排序条件sort全转为降序  第三排序条件id、时间判断全部转为升序
            $now_date = date('Y-m-d H:i:s');
            if ($data['status'] == 2 && $data['metime'] > $now_date) {
                $code  = 1;
                $sort1 = $data['sort'];
                $sort2 = 1;//第一个不需要第二条件进行判断,忽略第二排序条件,全部设置为相同
            }elseif ($data['sort']==0){
                $code = 2;
                $sort1 = 0 - $data['mg_id'];//将升序变为降序
                $sort2 = 1;//同上
            }elseif($data['status']==1) {
                $code=3;
                $sort1 = 0-$data['sort'];//
                $sort2 = $data['mstime'];
            } elseif ($data['status']==3) {
                $code=4;
                $sort1 = $data['sort'];
                $sort2 = time()-strtotime($data['metime']);
            } else {
                $code=5;//其他无法处理的情况,一般不会发生
                $sort1 = $data['mg_id'];
                $sort2 = $data['sort'];
            }
            return array($code,$sort1,$sort2);
        }
    

      我使用了三个条件排序 每个条件的界定方式不同 在代码中已有体现 

      使用原生的排序函数,速度有待进一步测试

  • 相关阅读:
    网页抓取
    基本数据结构
    小节
    顺序统计量
    线性时间排序
    快速排序
    堆排序 Heapsort
    大数运算
    趣味题,文本中洞的数量
    nginx config配置
  • 原文地址:https://www.cnblogs.com/Lynwood/p/9484806.html
Copyright © 2011-2022 走看看