这篇文章主要介绍了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抽象类实例相关推荐

  1. php 数组导出csv_php导出百万数据到csv

    先看代码: <?phpset_time_limit(0); // 设置超时ini_set('memory_limit', '100M'); // 设置最大使用的内存header("Co ...

  2. php导出cvs文件英文自动分割,导出csv_php导出csv文件函数

    摘要 腾兴网为您分享:php导出csv文件函数,桌面日历,优美图,小学英语,仙乐等软件知识,以及sfc游戏合集,计划生育网上办理平台,outlookapp,虾米返利网,书链,聚米网,幼儿园带量食谱软件 ...

  3. python生成excel表格-Python实现将数据库一键导出为Excel表格的实例

    数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python ...

  4. python如何读取数据并输出为表格_Python实现将数据库一键导出为Excel表格的实例...

    数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python ...

  5. python数据导出excel模板中的脚本_Python实现将数据库一键导出为Excel表格的实例...

    数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python ...

  6. PHP 导入导出excel、csv百万数据到数据库

    PHP 导入导出excel.csv百万数据到数据库 待解决: wamp下导入导出百万数据没有问题 lnmp下导入10W条数据没问题,导入50W及以上会出现nginx504报错 代码包地址 测试数据表地 ...

  7. python 销售数据分析输出表格_Python实现将数据库一键导出为Excel表格的实例

    Python实现将数据库一键导出为Excel表格的实例 下面小编就为大家带来一篇Python实现将数据库一键导出为Excel表格的实例.小编觉得挺不错的,现在就分享给大家, 数据库数据导出为excel ...

  8. php导出数据到csv文件,php导出CSV文件代码 PHP导出数据到CSV 如何排版

    如何使用PHP导出csv和excel文件你走后,再也没有一个声音能让我在人海中突然回首张望. 把Excel文件导入mysql: 打开excel文件,可用phpExcel开源的类 或者: 先把excel ...

  9. Oracle数据库表导出和导入csv文件操作

    Oracle数据库表导出和导入csv文件操作 数据库是Oracle 9i 1.导出csv文件 这个十分简单,用pl/sql工具即可,首先选中要导出的表,右键选择Query data,在左侧出现的窗口中 ...

最新文章

  1. 清北浙交大比拼,南大强势上榜,AI到底哪家强?
  2. Text模式和PDU模式短信的区别
  3. 结合vue、react、angular谈谈MVC、MVP、MVVM框架
  4. 携程梁建章:要让元宇宙技术成为真宇宙探索、旅游的灵感来源
  5. c++_导入/导出excel文件
  6. 大型集团企业云管平台建设参考架构
  7. SpringBoot实战(十六):集成Skywalking调用链监控系统
  8. ueditor 禁止编辑_织梦ueditor百度编辑器div style被过滤解决办法
  9. 网站渗透思路(小白专看,大佬绕道)
  10. 存储专访:整合磁带与磁盘 昆腾为用户提供更灵活的选择
  11. 吃透Kafka六:topic 创建过程
  12. 半自动安装jieba分词库
  13. 内网渗透-最实用的横向移动总结
  14. Excel中随机生成数字,函数RANDBETWEEN()的使用
  15. 英伟达显卡安装老驱动388.71
  16. Windows10_如何修改用户文件夹下的中文用户文件夹名
  17. 第六章第三十四题(打印日历)(Print calendar) - 编程练习题答案
  18. C++ 串口通信程序
  19. My favorite player-Davor Suker
  20. 人工智能数学课高等数学线性微积分数学教程笔记(1. 数学内容概述)

热门文章

  1. 技巧速看!如何帮助“表哥”快速玩转报告美化?
  2. 百雀羚、林清轩、逐本走红背后,植物基护肤品的春天来了?
  3. python面向对象的三个基本特征 含义和作用简介_面向对象语言的三个基本特征各自特点及优势...
  4. matlab 折线图_MATLAB作图实例:13:折线图和条形图的双轴图
  5. mysql构建url给scrapy_Python Scrapy从mysq填充起始url
  6. 学习CTF(二进制安全)一个月多的奇妙冒险~;
  7. Python创建一个循环链表、双向循环链表
  8. 7道Python函数相关的练习题
  9. python 类继承与子类实例初始化
  10. python print %s 号格式化输出