在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
/**** * 对传入的大赛列表进行排序 * @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); } 我使用了三个条件排序 每个条件的界定方式不同 在代码中已有体现 使用原生的排序函数,速度有待进一步测试 |
2022-08-30
2022-07-18
2022-08-17
2022-11-06
2022-07-29
请发表评论