一、生成CSV文件

1、主要函数:

fputcsv—将行格式化为 CSV 并写入文件指针

int fputcsv ( resource $handle , array $fields [, string $delimiter = ',' [, string $enclosure = '"' ]] )

1)函数说明:

fputcsv() 将一行(用 fields 数组传递)格式化为 CSV 格式并写入由 handle 指定的文件。

2)参数:

handle 文件指针必须是有效的,必须指向由fopen()或fsockopen()成功打开的文件(并还未由fclose()关闭)。

fields 值的一个数组。

delimiter 可选的delimiter参数设定字段分界符(只允许一个字符)。

enclosure 可选的enclosure参数设定字段字段环绕符(只允许一个字符)。

3)返回值:

返回写入字符串的长度, 或者在失败时返回false。

2、示例code:

//test data

$list = array (

array('name', 'data', 'number', 'price'),

array('iphone X', '2018/3/21', 123 ,8888),

array('imax pro', '2018/3/23',20,12000),

array('Letv', '2018/3/27',99,1100),

);

$fp = fopen('./file.csv', 'w') or die('Can\'t open file.');

// fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF)); //解决出现中文编码的问题

foreach ($list as $fields) {

if (fputcsv($fp, $fields) === false) {

die('Can\'t write line.');

}

}

fclose($fp) or die('Can\'t close file.');

如下为生成的CSV文件:

3、问题:

1)中文编码问题

//Windows下使用BOM来标记文本文件的编码方式

fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));

二、输出CSV数据

要输出CSV格式的数据而不是写入文件,可以使用特殊的输出流php://output。

要把SCV格式的数据放入一个pb字符串,而不是输出或写至一个文件,可以结合输出缓冲区使用,具体代码如下:

$list = array (

array('name', 'data', 'number', 'price'),

array('iphone X', '2018/3/21', 123 ,8888),

array('imax pro', '2018/3/23',20,12000),

array('Letv', '2018/3/27',99,1100),

);

ob_start();

$fp = fopen('php://output','w') or die('Can\'t open php://output');

foreach ($list as $fields) {

if (fputcsv($fp, $fields) === false) {

die('Can\'t write CSV line.');

}

}

fclose($fp) or die('Can\'t close php://output');

$output = ob_get_contents();

ob_end_clean();

//echo $output;

三、解析CSV文件

1、主要函数

如果CSV数据在一个文件中(或可以通过一个URL得到),用fopen()打开文件,并使用fgetcsv()读入数据。

fgetcsv—从文件指针中读入一行并解析 CSV 字段。

array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = ',' [, string $enclosure = '"' [, string $escape = '\\' ]]]] )

1)函数说明:

和 fgets() 类似,只除了 fgetcsv() 解析读入的行并找出 CSV 格式的字段然后返回一个包含这些字段的数组。

2)参数:

handle 一个由 fopen()、popen() 或 fsockopen() 产生的有效文件指针。

length 必须大于 CVS 文件内最长的一行。在 PHP 5 中该参数是可选的。如果忽略(在 PHP 5.0.4 以后的版本中设为 0)该参数的话,那么长度就没有限制,不过可能会影响执行效率。

delimiter 设置字段分界符(只允许一个字符)。

enclosure 设置字段环绕符(只允许一个字符)。

escape 设置转义字符(只允许一个字符),默认是一个反斜杠。

3)返回值:返回包含读取字段的索引数组。

2、示例代码如下:

$fp = fopen('./file.csv','r') or die('Can\'t open file');

print '

while($csv_line = fgetcsv($fp)) {

print '

';

for($i = 0, $j = count($csv_line); $i < $j; $i++){

print '

'.htmlentities($csv_line[$i]).'';//将字符转换为 HTML 转义字符

}

print '

';

}

print '

';

fclose($fp) or die('Can\'t close file');

3、注意

默认地,fgetcsv()会读入一整行数据。如果平均行长度超过8192字节,还可以明确指定行的长度而不是让PHP来确定,这样一来,你的程序可以运行得更快。为此要为fgetcsv()提供第二个参数,这是比CSV文件中最大行长度更大的一个值(不要忘记统计行尾空白符)。如果传入长度为0,PHP应付采用默认行为。

可以向fgetcsv()传入可选的第三个参数,这个作为分隔符来取代逗号(,)。不过,使用CSV的目的是为了很容易地交换表格数据,而使用一个不同的分隔符可能对此会有些影响。

不要试图绕过fgetcsv(),而只想读入一行再使用explode()按逗号进行解析。CSV比这要复杂,它可以处理包含特殊符号的字段值,如字段值中可能包含直接量逗号,不能把这些逗号看作是字段分隔符。使用fgetcsv()可以避免这样一些微妙的错误。

四、下载CSV文件

结合使用header()函数来改变php程序输出的内容类型,并使用fputcsv()函数完成数据格式转化,从而可以将CSV文件发送到浏览器。

示例代码如下:

$list = array (

array('name', 'data', 'number', 'price'),

array('iphone X', '2018/3/21', 123 ,8888),

array('imax pro', '2018/3/23',20,12000),

array('Letv', '2018/3/27',99,1100),

);

$fp = fopen('php://output','w') or die('Can\'t open php://output');

header('Content-Type: application/csv');

header('Content-Disposition: attachment; filename="save.csv"');

foreach ($list as $fields) {

if (fputcsv($fp, $fields) === false) {

die('Can\'t write CSV line.');

}

}

fclose($fp) or die('Can\'t close php://output');

php csv文件内容加粗,PHP强化之10 - CSV文件处理相关推荐

  1. linux so lazyload,linux函数深入探索——open函数打开文件是否将文件内容加载到内存空间...

    转自:https://blog.csdn.net/qq_17019203/article/details/85051627 问题:open(2)函数打开文件是否将文件内容加载到内存空间 首先,文件打开 ...

  2. linux 内存中建立文件,linux函数深入探索——open函数打开文件是否将文件内容加载到内存空间...

    转自:https://blog.csdn.net/qq_17019203/article/details/85051627 问题:open(2)函数打开文件是否将文件内容加载到内存空间 首先,文件打开 ...

  3. 2019-8-20 [Linux] 6.Shell的基本操作 查看 改变 列出 阅读开头/结尾 循环查看 阅读工具less 查找文件内容 文本分析工具AWK 文本编辑工具SED文件find 帮助man

    文章目录 6.linuxShell的基本操作 6.1 查看目录和文件 6.1.1 显示当前目录:pwd 6.1.2 改变目录:cd 6.1.3 列出目录内容:ls 1) 查看列表信息 以及详细信息 2 ...

  4. java控制器文件内容替换_如何用Java来进行文件切割和简单的内容过滤的实现

    一 由来 去年由于项目的需求,要将一个任意一个文件制作成一个xml文件,并且需要保持文件内容本身不产生变化,还要能够将这个xml重新还原为原文件.如果小型的文件还好处理,大型的xml,比如几个G的文件 ...

  5. 文件夹加密码的方法有哪些?文件夹加密方法盘点

    在我们使用电脑的过程中,我们会将一些重要的数据放入文件夹内进行统一管理,为了保护数据安全,文件夹加密码通常是一个不错的选择.那么文件夹该怎么加密码呢?电脑文件夹加密码的方法有哪些呢? 文件夹加密码方法 ...

  6. linux命令之查看文件内容加上行号-nl

    在linux下cat命令可以查看文件内容,不过有时候我们需要在前面加上行号,看起来更方便,nl命令就有这个功能. 比如查看一个sh脚本: $ cat print-printf.sh #!/bin/ba ...

  7. java 单元格内容加粗,excle单元格如何加粗《EXCEL中怎么对单元格中,公式的部分字段加粗?》...

    问下EXCEL表格分割线怎么加粗 单元格样式设置包含分割线加粗. Excel表格单元格线样式操作如下: ①框选单元格--右击--设置单元格 ②弹出"设置单元格式"--边框--根据实 ...

  8. java读取复杂csv文件内容_java读取并导出多类型数据csv文件

    1.主函数 public class csvtest { public static void main(String[] args) { List dataList = CSVUtils.impor ...

  9. python中读取文件内容-深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

最新文章

  1. 景观格局动态变化分析方法(基于ArcGIS、Fragstats、ENVI、ERDAS、Patch Analysis for ArcGIS) (2011-03-15 08:07:03)...
  2. 3d饼图 vue_这是我见过最优雅的Vue图片轮播插件——Vue-Awesome-Swiper
  3. MATLAB基本操作(六):矩阵操作的相关函数
  4. 洛谷P1126 机器人搬重物【bfs】
  5. Ubuntu18.04安装福昕阅读器
  6. 深入Node.js的模块机制
  7. java keytool 下载_常用的Java Keytool Keystore命令
  8. PHP连接MySQL-踩坑总结
  9. 关于提升短信ROI,我的6点思考
  10. 嵌入式工程师,怎么不被历史洪流冲走?
  11. linux字符集设置为英文,NLS_lang参数设置-linux设置字符集(国外英文资料).doc
  12. 【物联网毕设基础】单片机:NEC 协议红外遥控器
  13. 无惧黑暗强光,纯视觉导航也能全天候作业
  14. 物竞党的福利来啦~如何学物理竞赛获得省一及以上的成绩?
  15. CHAPTER 6 LB集群部署 - LVS
  16. 【报告分享】全球手游市场研究报告 -2022十大手游趋势-OpenMediation(附下载)
  17. acca计算机管理会计,acca与管理会计的八大区别在哪
  18. 音量增强器和均衡器Boom 3D mac中文版
  19. SQL系列(一)快速掌握Hive查询的重难点
  20. 【Rust日报】 2021-01-21 Rust 的产品实践:1Password

热门文章

  1. 编程不努力,老大徒伤悲
  2. 谷歌排名第一的编程语言,死磕这点应用,小白也能转型!
  3. 倒计时 7 天 | 完整议程大揭秘!来 20 个 AI 论坛,与百名大咖携手玩转人工智能...
  4. AI “闯入”北极圈
  5. 颜值即正义!颜值爆表的几个数据交互的库来啦!
  6. 为何各家抢滩物联网?
  7. 华为明日发布鸿蒙整体战略;京东宣告全面向技术转型;Kotlin 1.3.60 发布 | 极客头条...
  8. 如何在 40 秒内创建一个.Net Core Web API?
  9. 分析了 9 万条程序员招聘数据,Python 薪资竟反超 Java?
  10. 如果微软开发了 Android,会有何不同?