php 处理二维数组相同user_id,数量相加,合并用户id,返回一个数组

/**
 * 收益排行
 * 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值