根据数组某些字段组合,获取对应分数排名

 //以$key_array进行分组(可以是单个字段分组, 也可以多个字段组合分组), 计算平均分, 计算排名(同分同排名)
    public static function avg_by_array($list, $key_score = "zh_score", $key_array = "depart_id", $sort = SORT_DESC){
        $list_new = [];
        foreach ($list as $rrr){

            if(is_array($key_array)){   //以多个字段 进行分组
                $temp = array_fill_keys($key_array,'');
                $result=array_intersect_key($rrr,$temp);
                $temp_key = implode("-", $result);
            }else{  //单个字段分组, 例如depart_id
                $temp_key = $rrr[$key_array];
            }

//            $temp_key = $rrr[$key];//以depart_id分组
            if(!isset($list_new[$temp_key]['compute_sum'])){ //第一次成绩
                $list_new[$temp_key] = $rrr;
                $list_new[$temp_key]['compute_sum'] = (float)$rrr[$key_score];
                $list_new[$temp_key]['compute_count'] = 1;
                $list_new[$temp_key][$key_score] = (float)$rrr[$key_score];
            }else{  //累加成绩,算平均分
                $list_new[$temp_key]['compute_sum'] = round($list_new[$temp_key]['compute_sum'] + $rrr[$key_score],2);
                $list_new[$temp_key]['compute_count'] += 1;
                $score = round($list_new[$temp_key]['compute_sum'] / $list_new[$temp_key]['compute_count'],2); ;
                $list_new[$temp_key][$key_score] = (float)$score;
            }

        }

        $score = array_column($list_new,$key_score);
        array_multisort($score, $sort, $list_new);


        $pre_score = '';
        $count = 1;
        $rank ='';
        foreach ($list_new as $key => $row){
            if($pre_score != $row[$key_score]){
                $pre_score = $row[$key_score];
                $rank = $count;
            }
            $row['rank'] = $rank;
            $list_new[$key] = $row;
            $count++;
        }

        return $list_new;
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值