一个超级难的问题,唠叨大哥和众高手们请进。 把查询得到的结果搞到数组里再处理显示... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 关键问题不在于sql而是如何显示。 /*** 你的查询结果是这样的一个数组 ***/$rec = array ( array ( 'userid' => '9', 'studyid' => '20042544', 'truename' => '张三', 'term' => '学期一', 'course_name' => '课程一', 'total' => '65', 'classid' => '5', ), array ( 'userid' => '10', 'studyid' => '200521542', 'truename' => '李四', 'term' => '学期一', 'course_name' => '课程二', 'total' => '79', 'classid' => '5', ), array ( 'userid' => '10', 'studyid' => '200521542', 'truename' => '李四', 'term' => '学期一', 'course_name' => '课程三', 'total' => '69', 'classid' => '5', ), array ( 'userid' => '9', 'studyid' => '20042544', 'truename' => '张三', 'term' => '学期一', 'course_name' => '课程四', 'total' => '71', 'classid' => '5', ), array ( 'userid' => '9', 'studyid' => '20042544', 'truename' => '张三', 'term' => '学期二', 'course_name' => '课程一', 'total' => '80', 'classid' => '5', ), array ( 'userid' => '10', 'studyid' => '200521542', 'truename' => '李四', 'term' => '学期二', 'course_name' => '课程二', 'total' => '88', 'classid' => '5', ),);/*** 达到你的显示样式大致需要这样一个数据结构,当然不是最佳的 ***/$fmt = array( '学号' => '姓名', '成绩' => array( '学期一' => array('课程一' => 0, '课程二' => 0, '课程三' => 0, '课程四' => 0, '课程五' => 0, '课程六' => 0), '学期二' => array('课程一' => 0, '课程二' => 0, '课程三' => 0, '课程四' => 0, '课程五' => 0, '课程六' => 0), '学期三' => array('课程一' => 0, '课程二' => 0, '课程三' => 0, '课程四' => 0, '课程五' => 0, '课程六' => 0), ));/*** 为了将查询结果转换成显示需要的结构,要做以下操作。我是用模拟数据数组做的,实际可在读取查询时完成 ***/foreach($rec as $v) { $out[$v['studyid']]['姓名'] = $v['truename']; $out[$v['studyid']]['成绩'][$v['term']][$v['course_name']] = $v['total'];}/*** 输出的写法,由于可能有栏目空缺、也可能待输出数组中栏目的的次序与显示要求不同。因此用基本结构数组作为控制模板 ***/foreach($out as $k=>$v) { echo str_pad($k,10).'|'.str_pad($v['姓名'], 6, ' ', STR_PAD_BOTH); /** 用模板控制显示的次序 **/ foreach($fmt['成绩'] as $i=>$t) { foreach($t as $j=>$m) { if(isset($v['成绩'][$i][$j])) $n = $v['成绩'][$i][$j]; else $n = ''; echo '|'.str_pad($n, 4, " ", STR_PAD_BOTH); } } echo "\n";}示例输出20042544 | 张三 | 65 | | | | | | 80 | | | | | | | | | | | 200521542 | 李四 | | 79 | 69 | | | | | 88 | | | | | | | | | | 关于截取以逗号隔开的字符串位数 无法得到post过来的值 PHP新手问:build path与include path什么区别? 瞧一瞧,看一看, 小弟求教给位大虾们怎样实现鼠标滑过选项卡显示相应列表信息(下面是错误代码) 为什么phpmailer到服务器上就不能用了? 请大侠们帮我看看这个问题出在哪? WAMP5 1.6.1 问题 require_once 能不能进行错误处理? 大家帮忙解决这个最后的碉堡——可不能在最后堵住啊,最后一步了 在函数中改变全局变量 可以吗? 刚刚开发的网站,请看下.哪里不足请多多指教..谢谢
$rec = array (
array (
'userid' => '9',
'studyid' => '20042544',
'truename' => '张三',
'term' => '学期一',
'course_name' => '课程一',
'total' => '65',
'classid' => '5',
),
array (
'userid' => '10',
'studyid' => '200521542',
'truename' => '李四',
'term' => '学期一',
'course_name' => '课程二',
'total' => '79',
'classid' => '5',
),
array (
'userid' => '10',
'studyid' => '200521542',
'truename' => '李四',
'term' => '学期一',
'course_name' => '课程三',
'total' => '69',
'classid' => '5',
),
array (
'userid' => '9',
'studyid' => '20042544',
'truename' => '张三',
'term' => '学期一',
'course_name' => '课程四',
'total' => '71',
'classid' => '5',
),
array (
'userid' => '9',
'studyid' => '20042544',
'truename' => '张三',
'term' => '学期二',
'course_name' => '课程一',
'total' => '80',
'classid' => '5',
),
array (
'userid' => '10',
'studyid' => '200521542',
'truename' => '李四',
'term' => '学期二',
'course_name' => '课程二',
'total' => '88',
'classid' => '5',
),
);/*** 达到你的显示样式大致需要这样一个数据结构,当然不是最佳的 ***/
$fmt = array(
'学号' => '姓名',
'成绩' => array(
'学期一' => array('课程一' => 0, '课程二' => 0, '课程三' => 0, '课程四' => 0, '课程五' => 0, '课程六' => 0),
'学期二' => array('课程一' => 0, '课程二' => 0, '课程三' => 0, '课程四' => 0, '课程五' => 0, '课程六' => 0),
'学期三' => array('课程一' => 0, '课程二' => 0, '课程三' => 0, '课程四' => 0, '课程五' => 0, '课程六' => 0),
)
);/*** 为了将查询结果转换成显示需要的结构,要做以下操作。我是用模拟数据数组做的,实际可在读取查询时完成 ***/
foreach($rec as $v) {
$out[$v['studyid']]['姓名'] = $v['truename'];
$out[$v['studyid']]['成绩'][$v['term']][$v['course_name']] = $v['total'];
}/*** 输出的写法,由于可能有栏目空缺、也可能待输出数组中栏目的的次序与显示要求不同。因此用基本结构数组作为控制模板 ***/
foreach($out as $k=>$v) {
echo str_pad($k,10).'|'.str_pad($v['姓名'], 6, ' ', STR_PAD_BOTH);
/** 用模板控制显示的次序 **/
foreach($fmt['成绩'] as $i=>$t) {
foreach($t as $j=>$m) {
if(isset($v['成绩'][$i][$j]))
$n = $v['成绩'][$i][$j];
else
$n = '';
echo '|'.str_pad($n, 4, " ", STR_PAD_BOTH);
}
}
echo "\n";
}
示例输出
20042544 | 张三 | 65 | | | | | | 80 | | | | | | | | | | |
200521542 | 李四 | | 79 | 69 | | | | | 88 | | | | | | | | | |