php对csv文件的常用操作集合

php对csv文件的常用操作集合  

2011-09-28 15:20:56|  分类: PHP|字号 订阅

1.CSV的读取操作

1. <?php
2. $file fopen('D:/file.csv','r');
3. while ($data fgetcsv($file)) {//每次读取CSV里面的一行内容
4. print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可
5. }     fclose($file);    ?>

2.CSV的写入操作

1. <?php
2. $fp fopen('d:/file/file.csv''w');
3. fputcsv($fp,array('aaa','bbb','cccc'));
4. fputcsv($fp,array('mmm','yyy','haha'));   //fputcsv可以用数组循环的方式进行实现
5. fclose($fp);
6. ?>

3.输出CSV(下载功能)

01. <?php
02. header("Content-Type: text/csv");
03. header("Content-Disposition: attachment; filename=test.csv");
04. header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
05. header('Expires:0');
06. header('Pragma:public');
07. echo "id,areaCode,areaName\n";
08. echo "1,cn,china\n";
09. echo "2,us,America\n";
10. ?>

php中解析和生成逗号分隔的数据(CSV数据)

在php中你想把数据格式转化为逗号分隔的值(Comma-separted values, CSV),以便导入到电子表格或者数据库被其他php程序所使用。

首先我们考虑php生成CSV数据,使用fputcsv()函数生成一行CSV格式的数据。看以下的实例:

01. <?php
02. $strs array(
03. array'php中解析CSV数据''2010-02-01′, 'fputcsv', 'jwork' ),
04. array'php中生成CSV数据''2010-02-01′, 'fgetcsv', 'jwork' ),
05. array'php中使用流操作''2010-02-01′, 'php://output', 'jwork' )
06. );
07. $fp fopen'str.csv''w' or die'Can\'t open str.csv' );
08. foreach $strs as $str_line ) {
09. if fputcsv$fp$str_line ) === false ) {
10. die'Can\'t write CSV line.' );
11. }
12. }
13. fclose( $fp or die'Can\'t close str.csv' );
14. ?>

这个php代码写入文件str.csv的数据就是CSV数据。
如果想输出CSV格式的数据而不是将其写入到一个文件中,可以使用特殊的输出流–php://output
例: 将CSV数据存放在一个字符串中

01. <?php
02. $strs array(
03. array'php中解析CSV数据''2010-02-01′, 'fputcsv', 'jwork' ),
04. array'php中生成CSV数据''2010-02-01′, 'fgetcsv', 'jwork' ),
05. array'php中使用流操作''2010-02-01′, 'php://output', 'jwork' )
06. );
07. ob_start();
08. $fp fopen'php://output''w' or die'Can\'t open php://output' );
09. foreach$strs as $str_line ) {
10. if fputcsv$fp$str_line ) === false ) {
11. die'Can\'t write CSV line' );
12. }
13. }
14. fclose( $fp or die'Can\'t close php://output' );
15. $output = ob_get_contents();
16. ob_end_clean();
17. echo $output;   // $output为CSV数据的字符串
18. ?>

在php中解析CSV数据,例如,一个由Excel或者数据库导出的文件,想把这些记录和字段抽取成一种可以在php处理的数据格式。
如果CSV数据包含在一个文件中,先用fopen()打开这个文件,然后使用fgetcsv()函数读取其中的数据。
例:php从文件中读取CSV数据

01. <?php
02. $fp fopen'sample.csv''r' or die'Can\'t open file' );
03. // 二维数组 第一维表示每行数据 第二维表示每行中每个字段的值
04. $arr array();
05. while $csv_line fgetcsv$fp ) ) {
06. $arr_tmp array();
07. for$i = 0; $i count$csv_line ); $i++ ) {
08. $arr_tmp[$i] = $csv_line[$i];
09. }
10. array_push$arr$arr_tmp );
11. }
12. print_r( $arr );
13. ?>

在PHP4中,必须为fgetcsv()提供第二个参数,这个参数是一个大于CSV文件中最大一个行长度的值(行尾的空白符计算在内)。在PHP5 中,这个表示行长度的参数变成了可选择的。如果不指定这个参数,fgetcsv()函数会度取一整行的数据(在PHP5.0.4及以后的版本中,将此参数 设置为0也会达到同样的效果)。当平均的行长度超过8192字节时,如果你指定了一个明确的行长度,而不是让PHP自己去计算的话,那么PHP程序运行速 度会加快。

fgetcsv()函数的第三个参数可以用户替代逗号作为数据的分隔符。不过使用其他的分隔符会令CSV格式作为表列数据交换的一种简便途径的效果稍微打一些折扣。

不要试图绕过fgetcsv()函数,只用读取一行然后使用explode()按逗号进行解析。CSV的实际情况要比这种方式能够处理的格式更复 杂,比如说某些字段值中包含逗号直接量,不应该将字段中包含的逗号当成是字段的分隔符。使用fgetcsv()可以保证你和你的PHP程序避免这些不明显 的错误。

如何创建一个CSV文件

方法1 – 使用HTTP头

至于在Word和Excel,您需要添加头信息到PHP脚本的例子。

下面的代码片断创建一个指定的表包括其列名CSV文件。然后会提示用户下载此文件。

01. <?php
02. $table 'table_name';
03. $outstr = NULL;
04. header("Content-Type: application/csv");
05. header("Content-Disposition: attachment;Filename=cars-models.csv");
06. $conn = mysql教程_connect("localhost""mysql_user""mysql_password");
07. mysql_select_db("db",$conn);
08. // Query database to get column names
09. $result = mysql_query("show columns from $table",$conn);
10. // Write column names
11. while($row = mysql_fetch_array($result)){
12. $outstr.= $row['Field'].',';
13. }
14. $outstr substr($outstr, 0, -1)."n";
15. // Query database to get data
16. $result = mysql_query("select * from $table",$conn);
17. // Write data rows
18. while ($row = mysql_fetch_assoc($result)) {
19. $outstr.= join(','$row)."n";
20. }
21. echo $outstr;
22. mysql_close($conn);
23. ?>
24.  
25. 方法2 - 使用fputcsv()
26.  
27. fputcsv()函数格式作为CSV行并将其写入一个打开的文件。欲了解更多信息,看
28.  
29. 一看http://php.net/manual/en/function.fputcsv.php看看。
30.  
31. 下面的代码片断创建一个指定表的列名,包括CSV文件,并将其发送到浏览器。
32. [code]
33. <?php
34. $table 'table_name';
35. $filename = tempnam(sys_get_temp_dir(), "csv");
36. $conn = mysql_connect("localhost""mysql_user""mysql_password");
37. mysql_select_db("db",$conn);
38. $file fopen($filename,"w");
39. // Write column names
40. $result = mysql_query("show columns from $table",$conn);
41. for ($i = 0; $i < mysql_num_rows($result); $i++) {
42. $colArray[$i] = mysql_fetch_assoc($result);
43. $fieldArray[$i] = $colArray[$i]['Field'];
44. }
45. fputcsv($file,$fieldArray);
46. // Write data rows
47. $result = mysql_query("select * from $table",$conn);
48. for ($i = 0; $i < mysql_num_rows($result); $i++) {
49. $dataArray[$i] = mysql_fetch_assoc($result);
50. }
51. foreach ($dataArray as $line) {
52. fputcsv($file,$line);
53. }
54. fclose($file);
55. header("Content-Type: application/csv");
56. header("Content-Disposition: attachment;Filename=cars-models.csv");
57. // send file to browser
58. readfile($filename);
59. unlink($filename);
60. ?>

[/code]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值