PHP中的CSV操作:完整指南
CSV(逗号分隔值)是交换表格数据最流行的格式之一。在PHP中,CSV操作是原生支持的,无需安装额外的库。本文将涵盖所有方面:从基本读取到高级大文件处理。
CSV操作的核心函数
PHP提供了两个用于CSV操作的关键函数:
fgetcsv()— 从文件中读取CSV行fputcsv()— 以CSV格式写入一行
此外,还会使用标准的文件操作函数:fopen()、fclose()、file()。
在PHP中读取CSV文件
读取CSV最简单的方法是使用while循环配合fgetcsv():
<?php$filename = 'data.csv';
if (($handle = fopen($filename, 'r')) !== false) { // 读取标题(第一行) $headers = fgetcsv($handle, 1000, ','); // 读取其余行 while (($row = fgetcsv($handle, 1000, ',')) !== false) { echo "姓名: " . $row[0] . ", 邮箱: " . $row[1] . "<br>"; } fclose($handle);}?>fgetcsv()的参数:
handle— 文件句柄length— 行的最大长度(默认0表示无限制)separator— 字段分隔符(默认为逗号)enclosure— 引号字符(默认为双引号)escape— 转义字符(默认为反斜杠)
使用自定义分隔符读取CSV
并非所有CSV都使用逗号。常见的有分号(;)或制表符:
<?php$handle = fopen('data.tsv', 'r');while (($row = fgetcsv($handle, 1000, "\\t")) !== false) { print_r($row);}fclose($handle);?>将数据写入CSV
fputcsv()函数会自动处理转义和引号:
<?php$data = [ ['伊万', 'ivan@example.com', 25], ['玛丽亚', 'maria@example.com', 30], ['彼得', 'petr@example.com', 28]];
$handle = fopen('users.csv', 'w');
// 写入标题fputcsv($handle, ['姓名', '邮箱', '年龄']);
// 写入数据foreach ($data as $row) { fputcsv($handle, $row);}
fclose($handle);echo "CSV文件已成功创建!";?>fputcsv()的参数:
handle— 文件句柄fields— 要写入的字段数组separator— 字段分隔符enclosure— 引号字符escape— 转义字符
导出CSV数据供下载
通常需要生成CSV并提供给用户下载:
<?php$data = [ ['商品', '价格', '数量'], ['笔记本电脑', 75000, 10], ['鼠标', 1500, 50], ['键盘', 3500, 30]];
header('Content-Type: text/csv; charset=utf-8');header('Content-Disposition: attachment; filename="products.csv"');
$output = fopen('php://output', 'w');// 添加BOM以确保Excel中正确显示西里尔字符fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));
foreach ($data as $row) { fputcsv($output, $row);}
fclose($output);exit;?>处理大型CSV文件
处理大型文件(数十万行)时,务必避免将整个文件加载到内存中。请使用流式处理:
<?phpfunction processLargeCSV($filename, $batchSize = 1000) { $handle = fopen($filename,