1. 云栖社区>
  2. PHP教程>
  3. 正文

php导出CSV抽象类实例

作者:用户 来源:互联网 时间:2017-12-01 16:11:16

实例

php导出CSV抽象类实例 - 摘要: 本文讲的是php导出CSV抽象类实例,本文实例讲述了php导出CSV抽象类及其应用,分享给大家供大家参考。具体分析如下:该php导出CSV抽象类,可根据总记录数与每批次记录数,计算总批次,循环导出。避免内存不足的问题。ExportCSV.class.php类文件如下:<?

本文实例讲述了php导出CSV抽象类及其应用,分享给大家供大家参考。具体分析如下:

该php导出CSV抽象类,可根据总记录数与每批次记录数,计算总批次,循环导出。避免内存不足的问题。

ExportCSV.class.php类文件如下:
<?php /** php Export CSV abstract class,根据总记录数与每批次记录数,计算总批次,循环导出。 *  Date:  2014-05-16 *  Author: fdipzone *  Ver:  1.0 * *  Func: *  public setPageSize   设置每批次导出的记录条数 *  public setExportName  设置导出的文件名 *  public setSeparator   设置分隔符 *  public setDelimiter   设置定界符 *  public export      执行导出 *  private getPageCount   计算导出总批次 *  private setHeader    设置导出文件header *  private formatCSV    将数据格式化为csv格式 *  private escape      转义字符串 *  abstract getExportTotal 获取总记录条数,抽象方法,需继承类实现 *  abstract getExportFields 获取导出的列名,抽象方法,需继承类实现 *  abstract getExportData  获取每页记录,抽象方法,需继承类实现 */  abstract class ExportCSV{ // class start    // 定义子类必须要实现的方法      /** 获取总记录条数   * @return int   */   abstract protected function getExportTotal();    /** 获取导出的列名   * @return Array   */   abstract protected function getExportFields();    /** 获取每批次数据   * @param int $offset 偏移量   * @param int $limit 获取的记录条数   * @return Array   */   abstract protected function getExportData($offset, $limit);    // 定义类属性   protected $total = 0; // 总记录数   protected $pagesize = 500;      // 每批次导出的记录数   protected $exportName = 'export.csv'; // 导出的文件名   protected $separator = ',';      // 设置分隔符   protected $delimiter = '"';      // 设置定界符     /** 设置每次导出的记录条数   * @param int $pagesize 每次导出的记录条数   */   public function setPageSize($pagesize=0){     if(is_numeric($pagesize) && $pagesize>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示例程序如下:
<?php  // ExportCSV abstract class require "ExportCSV.class.php";  // 定义继承类 class myexport extends ExportCSV{    // 要导出的数据,实际情况会从db读取   protected $data = array(     array('1','傲雪星枫"','男'),     array('2','傲雪星枫","','男'),     array('3','傲雪星枫","','男'),     array('4',"傲雪星枫/"/"/r/n换行",'男'),     array('5','傲雪星枫,,','男'),     array('6','傲雪星枫"','男'),     array('7','傲雪星枫','男'),     array('8','傲雪星枫','男'),     array('9','傲雪星枫','男'),     array('10','傲雪星枫','男')   );    /* 返回总导出记录数   * @return int   */   protected function getExportTotal(){     return count($this->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程序设计有所帮助。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索实例 ,以便于您获取更多的相关知识。