/** * 收益排行 * 1每日,2每周排行 */ public function profitRank(){ $user_id = $this->_user['id']; $params = $this->_params; $validate = $this->validate($params, 'Distributor.profitRank'); if ($validate !== true) { return $this->error($validate, ResponseCode::ERROR); } $type = $params['type']; //1每日 2每周排行 $distributor_id = $params['distributor_id']; //分销员id $data = []; $msg = ''; if($type == 1){ $so_time = date('Y-m-d'); //今天 $where['rank_date'] = $so_time; $list = DistributorRankModel::alias('dr') ->leftJoin('user u','dr.user_id = u.id') ->where($where) ->order('dr.RB desc') ->field('dr.id,dr.distributor_id,dr.RB,dr.rank_date,u.avatar,u.nickname') ->select(); $my = []; $msg = '每日收益排行'; if(!empty($list)){ foreach ($list as $k => $v) { $list[$k]['rank'] = $k+1; if($v['distributor_id'] == $distributor_id){ $my = $list[$k]; } } } } if($type == 2){ $week = $this->get_week(); $list = DistributorRankModel::alias('dr') ->leftJoin('user u','dr.user_id = u.id') ->where('dr.rank_date','in',$week) ->field('dr.id,dr.user_id,dr.distributor_id,dr.RB,dr.rank_date,u.avatar,u.nickname') ->select(); $my = []; $msg = '每周收益排行'; if(!empty($list)){ $list = $this->formatArray($list); $rb = array_column($list,'RB'); //取出二维数组的某一列 array_multisort($rb,SORT_DESC,$list); //二维数组的排序 foreach ($list as $k => $v) { $list[$k]['rank'] = $k+1; if($v['distributor_id'] == $distributor_id){ $my = $list[$k]; } } } } $data['list'] = $list; $data['my'] = $my; return $this->success($data,$msg); }
/** * 处理二维数组相同user_id,数量相加,合并用户id,返回一个数组 * @param $array * @return array */ public function formatArray($array) { $newdata = array(); foreach ($array as $k=>$v){ if(!isset($newdata[$v['user_id']])){ //如果不存在就写入 $newdata[$v['user_id']] = $v; }else{ $newdata[$v['user_id']]['RB'] += $v['RB']; //存在就先存起来 } } return array_values($newdata); //获取二维数组的键值 }
/** * 获取本周所有日期 */ function get_week($time = '', $format='Y-m-d'){ $time = $time != '' ? $time : time(); //获取当前周 $week = date('w', $time); $date = []; for ($i=1; $i<=7; $i++){ $date[$i] = date($format ,strtotime( '+' . $i-$week .' days', $time)); } return $date; }