PHP中的CSV操作:读取、写入和数据处理

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP中的CSV操作:完整指南



CSV(逗号分隔值)是交换表格数据最流行的格式之一。PHP既有内置的CSV操作函数,也有强大的第三方库。在本文中,我们将介绍在PHP中读取、写入和处理CSV文件的所有主要方法。



PHP内置的CSV操作函数



PHP提供了几个内置函数,无需安装额外库即可处理CSV文件。主要函数有:



  • fgetcsv() — 从文件中读取一行并将其解析为数组
  • fputcsv() — 将数组以CSV格式写入文件
  • str_getcsv() — 将CSV字符串解析为数组


使用fgetcsv读取CSV文件



fgetcsv()函数从打开的文件中读取一行,并以数组形式返回。读取整个文件的示例:



<?php$filename = 'data.csv';

if (($handle = fopen($filename, 'r')) !== false) { while (($data = fgetcsv($handle, 1000, ',')) !== false) { // $data — 包含行数据的数组 echo implode(' | ', $data) . ""; } fclose($handle);}?>


fgetcsv()函数的参数:

  • handle — 文件句柄
  • length — 行的最大长度(通常为0或1000)
  • separator — 字段分隔符(默认为逗号)
  • enclosure — 字段包围字符(默认为双引号)
  • escape — 转义字符(默认为反斜杠)


将数据写入CSV文件



写入数据使用fputcsv()函数。它接受一个数组并将其转换为CSV字符串:



<?php$data = [    ['姓名', '年龄', '城市'],    ['伊万', 25, '莫斯科'],    ['玛丽亚', 30, '圣彼得堡'],];

$filename = 'output.csv';$handle = fopen($filename, 'w');

foreach ($data as $row) { fputcsv($handle, $row, ';', '"');}

fclose($handle);echo "文件 $filename 已成功创建!";?>


在此示例中,我们使用分号(;)作为分隔符,这在俄语CSV文件中很常见。



处理大型CSV文件



处理大文件(数十万行)时,重要的是不要将整个文件加载到内存中。请使用逐行读取:



<?phpfunction processLargeCSV($filename) {    $handle = fopen($filename, 'r');        // 如果有标题行,则跳过    $header = fgetcsv($handle);        while (($row = fgetcsv($handle)) !== false) {        // 处理每一行        $processed = array_map('trim', $row);        // 这里可以放你的处理逻辑        yield $processed; // 使用生成器    }        fclose($handle);}

// 使用foreach (processLargeCSV('bigdata.csv') as $row) { // 分别处理每一行 echo "已处理行:" . implode(',', $row) . "";}?>


使用生成器(yield)可以处理任意大小的文件而不会导致内存溢出。



用于高级操作的League\\Csv库



对于更复杂的任务,建议使用league/csv库。它提供了方便的面向对象接口和许多额外功能。



通过Composer安装:

composer require league/csv


使用示例:



<?phprequire 'vendor/autoload.php';

use League\\Csv\\Reader;use League\\Csv\\Writer;

// 读取CSV$csv = Reader::createFromPath('data.csv', 'r');$csv->setHeaderOffset(0); // 第一行为标题行

// 获取所有记录为关联

推荐