> 백엔드 개발 > PHP 튜토리얼 > php 二维数组根据相同id求和,并且限制条件

php 二维数组根据相同id求和,并且限制条件

WBOY
풀어 주다: 2016-06-06 20:10:25
원래의
1207명이 탐색했습니다.

<code><?php header('Content-Type: text/plain;charset=utf-8');

$arr = array
(
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530109',
            'stu_name' => '罗成',
            'stu_major' => '12热工1班',
            'depart_name' => '材料学院',
            'project_name' => '学雷锋做好事',
            'cname' => '社会活动模块',
            'period' => '16',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530109',
            'stu_name' => '罗成',
            'stu_major' => '12热工1班',
            'depart_name' => '材料学院',
            'project_name' => '会计从业资格证',
            'cname' => '科技创新模块',
            'period' => '12',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-1',
            'stu_id' => '201210530109',
            'stu_name' => '罗成',
            'stu_major' => '12热工1班',
            'depart_name' => '材料学院',
            'project_name' => '教师资格证',
            'cname' => '科技创新模块',
            'period' => '12',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530111',
            'stu_name' => '雷雨',
            'stu_major' => '13视传1班',
            'depart_name' => '设计学院',
            'project_name' => '美术学',
            'cname' => '文体艺术模块',
            'period' => '15',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530108',
            'stu_name' => '周励',
            'stu_major' => '13产设1班',
            'depart_name' => '设计学院',
            'project_name' => 'DOM编程艺术',
            'cname' => '科技创新模块',
            'period' => '0',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530116',
            'stu_name' => '高颜',
            'stu_major' => '13陶艺2班',
            'depart_name' => '陶美学院',
            'project_name' => '音乐',
            'cname' => '文体艺术模块',
            'period' => '0',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530110',
            'stu_name' => '程风',
            'stu_major' => '13信管1班',
            'depart_name' => '信息学院',
            'project_name' => 'JavaScript高级程序设计',
            'cname' => '思想道德模块',
            'period' => '12',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530112',
            'stu_name' => '苏环',
            'stu_major' => '13公事1班',
            'depart_name' => '人文学院',
            'project_name' => '音乐',
            'cname' => '文体艺术模块',
            'period' => '0',
            'credit' => '0'
        ),
   array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530109',
            'stu_name' => '罗成',
            'stu_major' => '12热工1班',
            'depart_name' => '材料学院',
            'project_name' => '美术学',
            'cname' => '文体艺术模块',
            'period' => '12',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-1',
            'stu_id' => '201210530109',
            'stu_name' => '罗成',
            'stu_major' => '12热工1班',
            'depart_name' => '材料学院',
            'project_name' => 'DOM编程艺术',
            'cname' => '科技创新模块',
            'period' => '12',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-1',
            'stu_id' => '201210530108',
            'stu_name' => '周励',
            'stu_major' => '13产设1班',
            'depart_name' => '设计学院',
            'project_name' => '美术学',
            'cname' => '文体艺术模块',
            'period' => '12',
            'credit' => '0'
        ),

);
    $tmp  = array();
    foreach($arr as $v) {

        if(!isset($tmp[$v['stu_id']])){
            $tmp[$v['stu_id']] = $v;
        }else {
            $tmp[$v['stu_id']]['period'] += $v['period'];
        }

    }
        
    
    echo "<pre class="brush:php;toolbar:false">";
    // 二维数组
    print_r(array_values($tmp));

?>
로그인 후 복사
로그인 후 복사

$arr是一个二维数组,数组里有相同的stu_id(学生学号),根据stu_id(学生学号)的period(学时),计算总的period(学时),我的实现方案是这样的。

<code>    $tmp  = array();
    foreach($arr as $v) {

        if(!isset($tmp[$v['stu_id']])){
            $tmp[$v['stu_id']] = $v;
        }else {
            $tmp[$v['stu_id']]['period'] += $v['period'];
        }

    }
        
    
    echo "<pre class="brush:php;toolbar:false">";
    // 二维数组
    print_r(array_values($tmp));
로그인 후 복사
로그인 후 복사

但是,这只是实现了period(学时)相加。
我还需要加限制条件计算出数组和每个学生的总学分(credit),就是根据cname(模块名称),某个学生的每个模块(共四个模块,分别是思想道德模块、科技创新模块、文体艺术模块、社会活动模块)都需要大于等于16(四个模块同时都满足大于等于16),则这个学生的总学分为6.否则为0。

不知道怎么实现,特请教各位大神,在此先谢谢各位解答了。

回复内容:

<code><?php header('Content-Type: text/plain;charset=utf-8');

$arr = array
(
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530109',
            'stu_name' => '罗成',
            'stu_major' => '12热工1班',
            'depart_name' => '材料学院',
            'project_name' => '学雷锋做好事',
            'cname' => '社会活动模块',
            'period' => '16',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530109',
            'stu_name' => '罗成',
            'stu_major' => '12热工1班',
            'depart_name' => '材料学院',
            'project_name' => '会计从业资格证',
            'cname' => '科技创新模块',
            'period' => '12',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-1',
            'stu_id' => '201210530109',
            'stu_name' => '罗成',
            'stu_major' => '12热工1班',
            'depart_name' => '材料学院',
            'project_name' => '教师资格证',
            'cname' => '科技创新模块',
            'period' => '12',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530111',
            'stu_name' => '雷雨',
            'stu_major' => '13视传1班',
            'depart_name' => '设计学院',
            'project_name' => '美术学',
            'cname' => '文体艺术模块',
            'period' => '15',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530108',
            'stu_name' => '周励',
            'stu_major' => '13产设1班',
            'depart_name' => '设计学院',
            'project_name' => 'DOM编程艺术',
            'cname' => '科技创新模块',
            'period' => '0',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530116',
            'stu_name' => '高颜',
            'stu_major' => '13陶艺2班',
            'depart_name' => '陶美学院',
            'project_name' => '音乐',
            'cname' => '文体艺术模块',
            'period' => '0',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530110',
            'stu_name' => '程风',
            'stu_major' => '13信管1班',
            'depart_name' => '信息学院',
            'project_name' => 'JavaScript高级程序设计',
            'cname' => '思想道德模块',
            'period' => '12',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530112',
            'stu_name' => '苏环',
            'stu_major' => '13公事1班',
            'depart_name' => '人文学院',
            'project_name' => '音乐',
            'cname' => '文体艺术模块',
            'period' => '0',
            'credit' => '0'
        ),
   array
        (
            'term' => '2015-2016-2',
            'stu_id' => '201210530109',
            'stu_name' => '罗成',
            'stu_major' => '12热工1班',
            'depart_name' => '材料学院',
            'project_name' => '美术学',
            'cname' => '文体艺术模块',
            'period' => '12',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-1',
            'stu_id' => '201210530109',
            'stu_name' => '罗成',
            'stu_major' => '12热工1班',
            'depart_name' => '材料学院',
            'project_name' => 'DOM编程艺术',
            'cname' => '科技创新模块',
            'period' => '12',
            'credit' => '0'
        ),
    array
        (
            'term' => '2015-2016-1',
            'stu_id' => '201210530108',
            'stu_name' => '周励',
            'stu_major' => '13产设1班',
            'depart_name' => '设计学院',
            'project_name' => '美术学',
            'cname' => '文体艺术模块',
            'period' => '12',
            'credit' => '0'
        ),

);
    $tmp  = array();
    foreach($arr as $v) {

        if(!isset($tmp[$v['stu_id']])){
            $tmp[$v['stu_id']] = $v;
        }else {
            $tmp[$v['stu_id']]['period'] += $v['period'];
        }

    }
        
    
    echo "<pre class="brush:php;toolbar:false">";
    // 二维数组
    print_r(array_values($tmp));

?>
로그인 후 복사
로그인 후 복사

$arr是一个二维数组,数组里有相同的stu_id(学生学号),根据stu_id(学生学号)的period(学时),计算总的period(学时),我的实现方案是这样的。

<code>    $tmp  = array();
    foreach($arr as $v) {

        if(!isset($tmp[$v['stu_id']])){
            $tmp[$v['stu_id']] = $v;
        }else {
            $tmp[$v['stu_id']]['period'] += $v['period'];
        }

    }
        
    
    echo "<pre class="brush:php;toolbar:false">";
    // 二维数组
    print_r(array_values($tmp));
로그인 후 복사
로그인 후 복사

但是,这只是实现了period(学时)相加。
我还需要加限制条件计算出数组和每个学生的总学分(credit),就是根据cname(模块名称),某个学生的每个模块(共四个模块,分别是思想道德模块、科技创新模块、文体艺术模块、社会活动模块)都需要大于等于16(四个模块同时都满足大于等于16),则这个学生的总学分为6.否则为0。

不知道怎么实现,特请教各位大神,在此先谢谢各位解答了。

<code>$res = array();

        foreach($arr as $key => $value){
            if(!array_key_exists($value['stu_id'],$res)){
                
                $res[$value['stu_id']][$value['cname']] = $value['period'];
            }else{
                if(array_key_exists($value['cname'],$res[$value['stu_id']])){
                    $res[$value['stu_id']][$value['cname']] +=$value['period'];
                }else{
                    $res[$value['stu_id']][$value['cname']] = $value['period'];
                }
            }
        }
        
        $tmp  = array();
        foreach($arr as $v) {

            if(!isset($tmp[$v['stu_id']])){
                $tmp[$v['stu_id']] = $v;
            }else {
                $tmp[$v['stu_id']]['period'] += $v['period'];
            }

        }

        $result = array();
        foreach ($res as $key => $value) {
              $result[$key]['total_period'] = array_sum($value);

            foreach($value as $key1 => $value1){
                if($value1 $value) {
            $lastData[$key]['term'] = $value['term'];
            $lastData[$key]['stu_id'] = $value['stu_id'];
              $lastData[$key]['stu_name'] = $value['stu_name'];
              $lastData[$key]["stu_major"] = $value['stu_major'];
              $lastData[$key]["depart_name"] = $value['depart_name'];
        }
        foreach ($result as $key => $value) {
            $lastData[$key]["total_period"] = $value['total_period'];
              $lastData[$key]["total_credit"] = $value['total_credit'];
        }

        
        $theLastData = array_values($lastData);

        echo "<pre class="brush:php;toolbar:false">";
        print_r($theLastData);
        exit;
로그인 후 복사

你的数据怎么来的 是从数据库中读取的吗? 如果是 那么你的这些问题直接查询就出来了, 不需要用php逻辑处理~ 如果不是 那么逐条把数据存到数据库中 再查询得到想要的结果

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿