php实现excel表格的转置
不知道取这个标题合不合适,大概的需求是这样,辅导员给了我们一个这样的excel表格,
在这个excel表格中,每行是一个学生的一门科目的记录,最终想做成,这样的效果,一个学生的所有科目占一行
(已经做出来的是这个效果)
于是,我想着使用php实现了这个功能
----------------------------------------------------------------------------------------------
整体思路大概这样,先将excel表格导入mysql数据库,然后通过select选择出所有的数据,遍历,按要求筛选,
构造期望的数据结构(数组),再插入到一个新的表。
1 <?php 2 namespace Student\Controller; 3 use Think\Controller; 4 use Think\Model; 5 6 class ZongceController extends Controller { 7 public function index($name){ 8 $info = M('aaaad')->where(array('D' => $name))->select(); 9 $Mark = D('aaaac'); 10 11 $number = $info[0]['C']; 12 $class = $info[0]['I']; 13 $arr = array( 14 'A' => $name, 15 'B' => $number, 16 'C' => $class, 17 ); 18 $sum = 0; 19 $xuefen = 0; 20 21 $lessen = $Mark->where(array('A' => '姓名'))->find(); 22 foreach ($info as $key => $value) { 23 if(!empty($value['R']) || !empty($value['N'])) 24 if($value['R'] === '专业选修课' || $value['R'] === '专业核心课') 25 { 26 $key = array_keys($lessen, $value['L']); 27 $arr[$key[0]] = $value['N']; 28 if (strlen($key[0]) === 1) { 29 $arr[chr(ord($key[0])+1)] = $value['M']; 30 } else { 31 $key1 = "A".chr(ord(substr($key[0], strlen($key[0])-1, 1))+1); 32 $arr[$key1] = $value['M']; 33 } 34 $sum += $value['N'] * $value['M']; //分数 35 $xuefen += $value['M']; //学分 36 } 37 } 38 $arr['zongfen'] = $sum; 39 $arr['xuefen'] = $xuefen; 40 $arr['jiaquan'] = $sum / $xuefen; 41 p($arr); 42 $Mark->add($arr); 43 } 44 45 public function api() 46 { 47 $info = M('aaaad'); 48 $name = $info->distinct(true)->field('D')->select(); 49 foreach ($name as $key => $value) { 50 $this->index($value['D']); 51 } 52 } 54 }