PHP数据根据多个条件排序,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);

}

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值