<?php class exportCsv{ //列名 protected $_column = array(); protected $_reg = array(); public $ret = ""; public function setColumn($colunms){ foreach ($colunms as $k => $colunm){ $this->_column[$k] = $colunm[\'title\']; $this->_reg[$k][\'reg\'] = $colunm[\'reg\']; $this->_reg[$k][\'colunm\'] = $colunm[\'name\']; } return $this; } public function bulidData($data){ $this->ret = implode(",", $this->_column); foreach($data as $k=>$dat){ if(!empty($this->_reg)){ $dat = call_user_func_array(array($this, \'doFilter\') , array($dat)); } $this->ret .= " \n".implode(",", $dat); } } public function transport($name="default"){ header("Content-Disposition: attachment; filename={$name}.csv"); header("Content-Type:APPLICATION/OCTET-STREAM"); $bomHeader = pack(\'H*\',\'EFBBBF\'); //将bom头转换二进制放在所有字符顶部,可以解决office Excel打开是乱码的问题 die($bomHeader.$this->ret); } private function doFilter($data){ foreach($this->_reg as $k =>$fun){ if( $data[$fun[\'colunm\']] && method_exists($this,$fun[\'reg\'])){ $data[$fun[\'colunm\']] = $this->$fun[\'reg\']($data[$fun[\'colunm\']]); } } return $data; } //格式化时间戳 private function dataFormate($timestamp){ return date("Y-m-d",$timestamp); } //去除换行 private function htmlFormate($content){ return str_replace(array("\n","\t\n"), array(" "," "), $content); } }
使用方法:
$columnArr = array( 0=>array(\'title\'=>\'ID\',\'name\'=>\'cid\'), array(\'title\'=>\'用户名\',\'name\'=>\'uid\'), array(\'title\'=>\'评论内容\',\'name\'=>\'comments\',\'reg\'=>\'htmlFormate\'), array(\'title\'=>\'评分\', \'name\'=>\'satisfaction\', \'reg\' =>\'int\'), array(\'title\'=>\'商品编码\', \'name\'=>\'goods_sn\', \'reg\' =>\'int\'), array(\'title\'=>\'添加时间\',\'name\'=>\'add_time\',\'reg\'=>\'dataFormate\'), array(\'title\'=>\'审核状态\',\'name\'=>\'status\') ); import ( "@.ORG.exportCsv" ); $csvModel = new exportCsv(); $csvModel->setColumn($columnArr); set_time_limit(0); $comments = $model->table(\'mall_comments mc\')->where($map)->field(\'cid,uid,comments,satisfaction,goods_sn,add_time,status\')->select(); $csvModel->bulidData($comments);