本文实例讲述了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; $i<$pagecount; $i++){ $exportData = \'\'; if($i==0){ // 第一条记录前先导出列名 $exportData .= $this->formatCSV($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(); ?>
希望本文所述对大家的PHP程序设计有所帮助。
本文地址:https://www.stayed.cn/item/297
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我