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);
    }

  我使用了三個條件排序 每個條件的界定方式不同 在代碼中已有體現 

  使用原生的排序函數,速度有待進一步測試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM