加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 教程 > 正文

php导出CSV抽象类实例

发布时间:2022-06-22 08:59:11 所属栏目:教程 来源:互联网
导读:这篇文章主要介绍了php导出CSV抽象类及其用法示例,可实现循环导出功能,从而避免内存不足的问题,需要的朋友可以参考下。 本文实例讲述了php导出CSV抽象类及其应用,分享给大家供大家参考。具体分析如下: 该php导出CSV抽象类,可根据总记录数与每批次记录数,
  这篇文章主要介绍了php导出CSV抽象类及其用法示例,可实现循环导出功能,从而避免内存不足的问题,需要的朋友可以参考下。
 
  本文实例讲述了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;  

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读