在PHP开发中,CSV是一种常见的轻量级数据交换格式,常用于后台报表导出、第三方数据导入等场景。PHP提供了多个内置函数和类来处理CSV,既能应对简单文本,也能处理带特殊字符的复杂字段。

一、使用fgetcsv读取CSV文件
fgetcsv是PHP最常用的CSV读取函数,它能正确解析逗号分隔、引号包裹的字段,并返回数组。
<?php
// 打开CSV文件
$handle = fopen('data.csv', 'r');
if ($handle === false) {
die('无法打开文件');
}
// 读取表头
$header = fgetcsv($handle);
// 逐行读取数据
while (($row = fgetcsv($handle)) !== false) {
// 将表头与数据组合成关联数组
$record = array_combine($header, $row);
print_r($record);
}
fclose($handle);
?>
二、使用fputcsv写入CSV文件
写入时推荐用fputcsv,它会自动处理字段中的逗号与引号,避免格式错误。
<?php
$handle = fopen('output.csv', 'w');
// 写入表头
fputcsv($handle, array('姓名', '年龄', '邮箱'));
// 写入数据行
fputcsv($handle, array('张三', 28, 'user@ipipp.com'));
fputcsv($handle, array('李四', 32, 'li@ipipp.com'));
fclose($handle);
echo 'CSV写入完成';
?>
处理中文乱码
如果CSV用Excel打开出现乱码,可以在文件开头写入BOM头,或统一使用UTF-8编码。
<?php
$handle = fopen('cn.csv', 'w');
// 写入UTF-8 BOM
fwrite($handle, "xEFxBBxBF");
fputcsv($handle, array('产品', '价格'));
fputcsv($handle, array('键盘', 199));
fclose($handle);
?>
三、使用SplFileObject面向对象方式
SplFileObject提供了更优雅的面向对象接口,适合写在大型项目里。
<?php
$file = new SplFileObject('data.csv');
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $line) {
// 跳过空行
if ($line === array(null)) {
continue;
}
print_r($line);
}
?>
四、常见注意事项
- 字段中包含逗号时,fputcsv会自动用引号包裹,无需手动处理。
- 读取大文件应避免一次性读入内存,使用while循环逐行处理。
- 路径中使用相对路径时要注意脚本执行目录,推荐用绝对路径。
掌握上述PHP读写CSV的方法,就能稳定地完成大部分数据格式转换任务。