php的匯出CSV抽象類別

來源:互聯網
上載者:User

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  // 查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/PHP/        $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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.