您好,欢迎访问一九零五行业门户网

php 导出CSV表格的抽象类

php 导出csv表格的抽象类
php 导出csv抽象类,根据总记录数与每批次记录数,计算总批次,循环导出。避免内存不足的问题。
exportcsv.class.php
0){ $this->pagesize = $pagesize; } } /** 设置导出的文件名 * @param string $filename 导出的文件名 */ public function setexportname($filename){ if($filename!=''){ $this->exportname = $filename; } } /** 设置分隔符 * @param string $separator 分隔符 */ public function setseparator($separator){ if($separator!=''){ $this->separator = $separator; } } /** 设置定界符 * @param string $delimiter 定界符 */ public function setdelimiter($delimiter){ if($delimiter!=''){ $this->delimiter = $delimiter; } } /** 导出csv */ public function export(){ // 获取总记录数 $this->total = $this->getexporttotal(); // 没有记录 if(!$this->total){ return false; } // 计算导出总批次 $pagecount = $this->getpagecount(); // 获取导出的列名 $fields = $this->getexportfields(); // 设置导出文件header $this->setheader(); // 循环导出 for($i=0; $iformatcsv($fields); } // 设置偏移值 $offset = $i*$this->pagesize; // 获取每页数据 $data = $this->getexportdata($offset, $this->pagesize); // 将每页数据转换为csv格式 if($data){ foreach($data as $row){ $exportdata .= $this->formatcsv($row); } } // 导出数据 echo $exportdata; } } /** 计算总批次 */ private function getpagecount(){ $pagecount = (int)(($this->total-1)/$this->pagesize)+1; return $pagecount; } /** 设置导出文件header */ private function setheader(){ header('content-type:application/x-msexcel'); $ua = $_server['http_user_agent']; if(preg_match(/msie/, $ua)){ header('content-disposition:attachment; filename='.rawurlencode($this->exportname).''); }elseif(preg_match(/firefox/, $ua)){ header(content-disposition:attachment; filename*=\utf8''.$this->exportname.''); }else{ header('content-disposition:attachment; filename='.$this->exportname.''); } ob_end_flush(); ob_implicit_flush(true); } /** 格式化为csv格式数据 * @param array $data 要转换为csv格式的数组 */ private function formatcsv($data=array()){ // 对数组每个元素进行转义 $data = array_map(array($this,'escape'), $data); return $this->delimiter.implode($this->delimiter.$this->separator.$this->delimiter, $data).$this->delimiter.\r\n; } /** 转义字符串 * @param string $str * @return string */ private function escape($str){ return str_replace($this->delimiter, $this->delimiter.$this->delimiter, $str); }} // class end?>
demo
data); } /** 返回导出的列名 * @return array */ protected function getexportfields(){ $title = array('id','name','gender'); return $title; } /* 返回每批次的记录 * @param int $offset 偏移量 * @param int $limit 获取的记录条数 * @return array */ protected function getexportdata($offset, $limit){ return array_slice($this->data, $offset, $limit); }}// 导出$obj = new myexport();$obj->setpagesize(1);$obj->setexportname('myexport.csv');$obj->setseparator(',');$obj->setdelimiter('');$obj->export();?>
其它类似信息

推荐信息