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抽象类实例相关推荐
- php 数组导出csv_php导出百万数据到csv
先看代码: <?phpset_time_limit(0); // 设置超时ini_set('memory_limit', '100M'); // 设置最大使用的内存header("Co ...
- php导出cvs文件英文自动分割,导出csv_php导出csv文件函数
摘要 腾兴网为您分享:php导出csv文件函数,桌面日历,优美图,小学英语,仙乐等软件知识,以及sfc游戏合集,计划生育网上办理平台,outlookapp,虾米返利网,书链,聚米网,幼儿园带量食谱软件 ...
- python生成excel表格-Python实现将数据库一键导出为Excel表格的实例
数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python ...
- python如何读取数据并输出为表格_Python实现将数据库一键导出为Excel表格的实例...
数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python ...
- python数据导出excel模板中的脚本_Python实现将数据库一键导出为Excel表格的实例...
数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python ...
- PHP 导入导出excel、csv百万数据到数据库
PHP 导入导出excel.csv百万数据到数据库 待解决: wamp下导入导出百万数据没有问题 lnmp下导入10W条数据没问题,导入50W及以上会出现nginx504报错 代码包地址 测试数据表地 ...
- python 销售数据分析输出表格_Python实现将数据库一键导出为Excel表格的实例
Python实现将数据库一键导出为Excel表格的实例 下面小编就为大家带来一篇Python实现将数据库一键导出为Excel表格的实例.小编觉得挺不错的,现在就分享给大家, 数据库数据导出为excel ...
- php导出数据到csv文件,php导出CSV文件代码 PHP导出数据到CSV 如何排版
如何使用PHP导出csv和excel文件你走后,再也没有一个声音能让我在人海中突然回首张望. 把Excel文件导入mysql: 打开excel文件,可用phpExcel开源的类 或者: 先把excel ...
- Oracle数据库表导出和导入csv文件操作
Oracle数据库表导出和导入csv文件操作 数据库是Oracle 9i 1.导出csv文件 这个十分简单,用pl/sql工具即可,首先选中要导出的表,右键选择Query data,在左侧出现的窗口中 ...
最新文章
- 清北浙交大比拼,南大强势上榜,AI到底哪家强?
- Text模式和PDU模式短信的区别
- 结合vue、react、angular谈谈MVC、MVP、MVVM框架
- 携程梁建章:要让元宇宙技术成为真宇宙探索、旅游的灵感来源
- c++_导入/导出excel文件
- 大型集团企业云管平台建设参考架构
- SpringBoot实战(十六):集成Skywalking调用链监控系统
- ueditor 禁止编辑_织梦ueditor百度编辑器div style被过滤解决办法
- 网站渗透思路(小白专看,大佬绕道)
- 存储专访:整合磁带与磁盘 昆腾为用户提供更灵活的选择
- 吃透Kafka六:topic 创建过程
- 半自动安装jieba分词库
- 内网渗透-最实用的横向移动总结
- Excel中随机生成数字,函数RANDBETWEEN()的使用
- 英伟达显卡安装老驱动388.71
- Windows10_如何修改用户文件夹下的中文用户文件夹名
- 第六章第三十四题(打印日历)(Print calendar) - 编程练习题答案
- C++ 串口通信程序
- My favorite player-Davor Suker
- 人工智能数学课高等数学线性微积分数学教程笔记(1. 数学内容概述)
热门文章
- 技巧速看!如何帮助“表哥”快速玩转报告美化?
- 百雀羚、林清轩、逐本走红背后,植物基护肤品的春天来了?
- python面向对象的三个基本特征 含义和作用简介_面向对象语言的三个基本特征各自特点及优势...
- matlab 折线图_MATLAB作图实例:13:折线图和条形图的双轴图
- mysql构建url给scrapy_Python Scrapy从mysq填充起始url
- 学习CTF(二进制安全)一个月多的奇妙冒险~;
- Python创建一个循环链表、双向循环链表
- 7道Python函数相关的练习题
- python 类继承与子类实例初始化
- python print %s 号格式化输出