php 二维数组根据相同id求和,并且限制条件
程序员文章站
2022-05-21 13:59:54
...
'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 "";
// 二维数组
print_r(array_values($tmp));
?>
$arr是一个二维数组,数组里有相同的stu_id(学生学号),根据stu_id(学生学号)的period(学时),计算总的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'];
}
}
echo "";
// 二维数组
print_r(array_values($tmp));
但是,这只是实现了period(学时)相加。
我还需要加限制条件计算出数组和每个学生的总学分(credit),就是根据cname(模块名称),某个学生的每个模块(共四个模块,分别是思想道德模块、科技创新模块、文体艺术模块、社会活动模块)都需要大于等于16(四个模块同时都满足大于等于16),则这个学生的总学分为6.否则为0。
不知道怎么实现,特请教各位大神,在此先谢谢各位解答了。
回复内容:
'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 "";
// 二维数组
print_r(array_values($tmp));
?>
$arr是一个二维数组,数组里有相同的stu_id(学生学号),根据stu_id(学生学号)的period(学时),计算总的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'];
}
}
echo "";
// 二维数组
print_r(array_values($tmp));
但是,这只是实现了period(学时)相加。
我还需要加限制条件计算出数组和每个学生的总学分(credit),就是根据cname(模块名称),某个学生的每个模块(共四个模块,分别是思想道德模块、科技创新模块、文体艺术模块、社会活动模块)都需要大于等于16(四个模块同时都满足大于等于16),则这个学生的总学分为6.否则为0。
不知道怎么实现,特请教各位大神,在此先谢谢各位解答了。
$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 "";
print_r($theLastData);
exit;
你的数据怎么来的 是从数据库中读取的吗? 如果是 那么你的这些问题直接查询就出来了, 不需要用php逻辑处理~ 如果不是 那么逐条把数据存到数据库中 再查询得到想要的结果