同一阶段所有课程处理

/**
 * 阶段课程处理
 * $array 订单原数组,一个用户有多少订单,一个订单有多个相同阶段,同一个阶段有不能同的课程,这里处理区分同一个阶段的所有课程并返回一个数组
 * $type 类型
 */
public function stageArray($array, $type)
{
    //所有阶段
    $cs = CourseStageModel::select()->toArray();
    $list = array();
    if (!empty($array)) {
        $data = array();
        foreach ($array as $k => $v) {
            $data[$v['stage_id']]['stage']['is_load'] = false;
            $data[$v['stage_id']]['stage']['stage_id'] = $v['stage_id'];
            $data[$v['stage_id']]['stage']['oc_id'] = $v['oc_id'];
            $data[$v['stage_id']]['stage']['name'] = $v['stage_name'];
            $data[$v['stage_id']]['stage']['is_practice'] = false;
            if (!isset($data[$v['stage_id']])) { //如果不存在就写入
                $data[$v['stage_id']]['course'][] = $v;
            } else {
                $data[$v['stage_id']]['course'][] = $v; //存在就先存起来
            }
        }
        $list = array_values($data); //取出键值,原格式:['1':{'id':1},'2':{'id':2}] 取出后 [{'id':1},{'id':2}]
        $css = array_column($cs, 'id');
        //从多维数组中分离出一列二维数组
        $s = array_column($list, 'stage');
        $ss = array_column($s, 'stage_id');

        $a = array_diff($css, $ss); //两个数组的差集
        if (!empty($a)) {
            foreach ($cs as $k => $v) {
                foreach ($a as $ks => $vs) {
                    if ($cs[$k]['id'] == $vs) {
                        $stage['stage']['is_load'] = false;
                        $stage['stage']['stage_id'] = $cs[$k]['id'];
                        $stage['stage']['name'] = $cs[$k]['stage_name'];
                        $stage['stage']['sum_course_score'] = 0; //课程总时长
                        $stage['stage']['course_duration'] = 0;
                        $stage['stage']['course_avg'] = 0;
                        $stage['stage']['is_practice'] = false;
                        $stage['course'] = array();
                        $list[] = $stage;
                    }
                }
            }
        }

        $id = array(); //多维数组对id排序
        foreach ($list as $key => $row) {
            $id[$key] = $row['stage']['stage_id'];
        }

        //所有阶段课程总时长
        foreach ($list as $k => $v) {
            $sum_course_score = 0;
            $course = $v['course'];
            if (!empty($course)) {
                foreach ($course as $ks => $vs) {
                    $sum_course_score += $vs['course_duration'];
                }
            }
            $list[$k]['stage']['sum_course_score'] = $sum_course_score / 60;
        }

        array_multisort($id, SORT_ASC, $list); //多维数组排序
    } else {
        //空阶段处理
        foreach ($cs as $k => $v) {
            $stage['stage']['is_load'] = false;
            $stage['stage']['stage_id'] = $cs[$k]['id'];
            $stage['stage']['name'] = $cs[$k]['stage_name'];
            $stage['stage']['course_duration'] = 0;
            $stage['stage']['course_avg'] = 0;
            $stage['stage']['sum_course_score'] = 0;
            $stage['stage']['is_practice'] = false;
            $stage['course'] = array();
            $list[] = $stage;
        }
    }
    return $list;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值