日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 数组导出csv_php导出CSV抽象类实例

發布時間:2025/3/19 php 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 数组导出csv_php导出CSV抽象类实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章主要介紹了php導出CSV抽象類及其用法示例,可實現循環導出功能,從而避免內存不足的問題,需要的朋友可以參考下

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

該php導出CSV抽象類,可根據總記錄數與每批次記錄數,計算總批次,循環導出。避免內存不足的問題。

ExportCSV.class.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

$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示例程序如下:

// 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程序設計有所幫助。

總結

以上是生活随笔為你收集整理的php 数组导出csv_php导出CSV抽象类实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。