中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

php導(dǎo)出CSV抽象類實例

本文實例講述了php導(dǎo)出CSV抽象類及其應(yīng)用,分享給大家供大家參考。具體分析如下:

php導(dǎo)出CSV抽象類,可根據(jù)總記錄數(shù)與每批次記錄數(shù),計算總批次,循環(huán)導(dǎo)出。避免內(nèi)存不足的問題。

ExportCSV.class.php類文件如下:

<?php /** php Export CSV abstract class,根據(jù)總記錄數(shù)與每批次記錄數(shù),計算總批次,循環(huán)導(dǎo)出。 *  Date:  2014-05-16 *  Author: fdipzone *  Ver:  1.0 * *  Func: *  public setPageSize   設(shè)置每批次導(dǎo)出的記錄條數(shù) *  public setExportName  設(shè)置導(dǎo)出的文件名 *  public setSeparator   設(shè)置分隔符 *  public setDelimiter   設(shè)置定界符 *  public export      執(zhí)行導(dǎo)出 *  private getPageCount   計算導(dǎo)出總批次 *  private setHeader    設(shè)置導(dǎo)出文件header *  private formatCSV    將數(shù)據(jù)格式化為csv格式 *  private escape      轉(zhuǎn)義字符串 *  abstract getExportTotal 獲取總記錄條數(shù),抽象方法,需繼承類實現(xiàn) *  abstract getExportFields 獲取導(dǎo)出的列名,抽象方法,需繼承類實現(xiàn) *  abstract getExportData  獲取每頁記錄,抽象方法,需繼承類實現(xiàn) */  abstract class ExportCSV{ // class start    // 定義子類必須要實現(xiàn)的方法      /** 獲取總記錄條數(shù)   * @return int   */   abstract protected function getExportTotal();    /** 獲取導(dǎo)出的列名   * @return Array   */   abstract protected function getExportFields();    /** 獲取每批次數(shù)據(jù)   * @param int $offset 偏移量   * @param int $limit 獲取的記錄條數(shù)   * @return Array   */   abstract protected function getExportData($offset, $limit);    // 定義類屬性   protected $total = 0;         // 總記錄數(shù)   protected $pagesize = 500;      // 每批次導(dǎo)出的記錄數(shù)   protected $exportName = 'export.csv'; // 導(dǎo)出的文件名   protected $separator = ',';      // 設(shè)置分隔符   protected $delimiter = '"';      // 設(shè)置定界符     /** 設(shè)置每次導(dǎo)出的記錄條數(shù)   * @param int $pagesize 每次導(dǎo)出的記錄條數(shù)   */   public function setPageSize($pagesize=0){     if(is_numeric($pagesize) && $pagesize>0){       $this->pagesize = $pagesize;     }   }    /** 設(shè)置導(dǎo)出的文件名   * @param String $filename 導(dǎo)出的文件名   */   public function setExportName($filename){     if($filename!=''){       $this->exportName = $filename;     }   }    /** 設(shè)置分隔符   * @param String $separator 分隔符   */   public function setSeparator($separator){     if($separator!=''){       $this->separator = $separator;     }   }    /** 設(shè)置定界符   * @param String $delimiter 定界符   */   public function setDelimiter($delimiter){     if($delimiter!=''){       $this->delimiter = $delimiter;     }   }    /** 導(dǎo)出csv */   public function export(){      // 獲取總記錄數(shù)     $this->total = $this->getExportTotal();      // 沒有記錄     if(!$this->total){       return false;     }      // 計算導(dǎo)出總批次     $pagecount = $this->getPageCount();      // 獲取導(dǎo)出的列名     $fields = $this->getExportFields();      // 設(shè)置導(dǎo)出文件header     $this->setHeader();      // 循環(huán)導(dǎo)出     for($i=0; $i<$pagecount; $i++){        $exportData = '';        if($i==0){ // 第一條記錄前先導(dǎo)出列名         $exportData .= $this->formatCSV($fields);       }        // 設(shè)置偏移值       $offset = $i*$this->pagesize;        // 獲取每頁數(shù)據(jù)       $data = $this->getExportData($offset, $this->pagesize);        // 將每頁數(shù)據(jù)轉(zhuǎn)換為csv格式       if($data){         foreach($data as $row){           $exportData .= $this->formatCSV($row);         }       }        // 導(dǎo)出數(shù)據(jù)       echo $exportData;     }   }    /** 計算總批次 */   private function getPageCount(){     $pagecount = (int)(($this->total-1)/$this->pagesize)+1;     return $pagecount;   }    /** 設(shè)置導(dǎo)出文件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格式數(shù)據(jù)   * @param Array $data 要轉(zhuǎn)換為csv格式的數(shù)組   */   private function formatCSV($data=array()){     // 對數(shù)組每個元素進行轉(zhuǎn)義     $data = array_map(array($this,'escape'), $data);     return $this->delimiter.implode($this->delimiter.$this->separator.$this->delimiter, $data).$this->delimiter."/r/n";   }    /** 轉(zhuǎ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{    // 要導(dǎo)出的數(shù)據(jù),實際情況會從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','傲雪星楓','男')   );    /* 返回總導(dǎo)出記錄數(shù)   * @return int   */   protected function getExportTotal(){     return count($this->data);   }    /** 返回導(dǎo)出的列名   * @return Array   */   protected function getExportFields(){     $title = array('id','name','gender');     return $title;   }    /* 返回每批次的記錄   * @param int $offset 偏移量   * @param int $limit 獲取的記錄條數(shù)   * @return Array   */   protected function getExportData($offset, $limit){     return array_slice($this->data, $offset, $limit);   } }  // 導(dǎo)出 $obj = new myexport(); $obj->setPageSize(1); $obj->setExportName('myexport.csv'); $obj->setSeparator(','); $obj->setDelimiter('"'); $obj->export(); ?> 

完整實例代碼點擊此處本站下載。

希望本文所述對大家的php程序設(shè)計有所幫助。

php技術(shù)php導(dǎo)出CSV抽象類實例,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产露脸国语对白在线 | 操久久| 天堂在线免费视频 | 国产精品一区二区三区久久 | 日韩av成人| 天天草天天操 | 日韩在线欧美 | 久久精品国产亚洲 | 99久久99| 黄网站涩免费蜜桃网站 | 日韩二三区| 黄色小视频大全 | 五月天激情综合网 | 欧美精品一区二区三区四区 在线 | 成人在线视频网 | 国产激情在线看 | 亚洲精品视频一区 | 在线成人av | 国产精品视频一区二区三区 | 久久精品日| 精品欧美一区二区精品久久 | 亚洲一区二区在线播放 | 亚洲一区二区av | 视频1区2区 | 国产在线观看一区二区三区 | www.成人久久| 亚洲自拍偷拍免费视频 | 成人av一区 | 国产一区免费 | 中文日韩字幕 | 欧美成人h版在线观看 | 91在线看片 | 激情久久av一区av二区av三区 | 色视频免费| 欧美日韩高清在线观看 | 久热久草 | 亚洲综合二区 | 精品中文在线 | 一久久久 | xxxxx黄色片 欧美一区免费 | 中文字幕免费 |