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; $iformatCSV($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(); ?>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
