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]