PHP怎么处理CSV文件?

文章导读
Previous Quiz Next 流行的电子表格程序使用 CSV 文件格式(全称 Comma Separated Values,即逗号分隔值)来导出工作表数据为纯文本。每行文件代表工作表的一行数据,每列的值由逗号分隔。例如,一个包含姓名和年龄的 CSV 文件可能如下所示
📋 目录
  1. 为什么使用 CSV 文件?
  2. PHP 处理 CSV 文件的函数
  3. fgetcsv() 函数
  4. fputcsv() 函数
  5. 向 CSV 文件追加数据
  6. 删除 CSV 文件
A A

PHP - 处理 CSV 文件



Previous
Quiz
Next

流行的电子表格程序使用 CSV 文件格式(全称 Comma Separated Values,即逗号分隔值)来导出工作表数据为纯文本。每行文件代表工作表的一行数据,每列的值由逗号分隔。例如,一个包含姓名和年龄的 CSV 文件可能如下所示 −

Name,Age
Amit Sharma,30
Deepak Jain,25

为什么使用 CSV 文件?

以下是在 PHP 中使用 CSV 文件的原因 −

  • CSV 文件易于创建和读取。

  • CSV 文件兼容多种工具,包括 Excel。

  • 它们比其他文件类型占用更少的空间。

PHP 处理 CSV 文件的函数

PHP 的文件系统函数库提供了两个函数 - fgetcsv()fputcsv() - 分别用于从 CSV 文件读取数据到数组,以及将数组元素写入 CSV 文件。

fgetcsv() 函数

fgetcsv() 函数从文件指针读取一行,并将其解析为 CSV 字段。

fgetcsv(
   resource $stream,
   ?int $length = null,
   string $separator = ",",
   string $enclosure = "\"",
   string $escape = "\\"
): array|false

$stream 参数是文件资源的句柄,以 读取模式 打开。默认的分隔符是逗号,如果需要可以指定其他符号。

fgetcsv() 函数返回包含字段的索引数组。如果函数遇到任何错误,则返回 false

为了演示 fgetcsv() 函数的使用,将以下文本保存为当前工作目录下的 "hello.txt"。

Name, Email, Post, Salary
Ravishankar, ravi@gmail.com, Manager, 40000
Kavita, kavita@hotmail.com, Assistant, 25000
Nandkumar, nandu@example.com, Programmer, 30000

示例

以下 PHP 代码从该文件中读取 CSV 数据,并返回一个数组。然后将数组中的字段渲染为 HTML 表格 −

<?php
   $filename = 'hello.csv';
   $data = [];

   // 打开文件
   $f = fopen($filename, 'r');

   if ($f === false) {
      die('Cannot open the file ' . $filename);
   }

   // 逐行读取 CSV 文件
   while (($row = fgetcsv($f)) !== false) {
      $data[] = $row;
   }

   // 关闭文件
   fclose($f);
   echo "<table border=1>";
   foreach ($data as $row) {
      echo "<tr>";
      foreach($row as $val) {
         echo "<td>$val</td>"; 
      }
      echo "</tr>";
   }
   echo "</table>";
?>

它将产生以下 输出

Name Email Post Salary
Ravishankar ravi@gmail.com Manager 40000
Kavita kavita@hotmail.com Assistant 25000
Nandkumar nandu@example.com Programmer 30000

fputcsv() 函数

fputcsv() 函数将一个索引数组写入 CSV 文件的当前文件指针位置,其元素用逗号分隔。

fputcsv(
   resource $stream,
   array $fields,
   string $separator = ",",
   string $enclosure = "\"",
   string $escape = "\\",
   string $eol = "\n"
): int|false

目标文件必须以写入模式打开。第二个必需参数是一个由逗号分隔的字段组成的数组。与 fgetcsv() 函数类似,默认分隔符是逗号。

示例

在以下代码中,一个二维的逗号分隔值数组被写入 CSV 文件。

<?php
   $data = [
      ["Name", "Email", "Post", "Salary"],
      ["Ravishankar", "ravi@gmail.com", "Manager", "40000"],
      ["Kavita", "kavita@hotmail.com", "Assistant", "25000"],
      ["Nandkumar", "nandu@example.com", "Programmer", "30000"],
   ];
   $filename = 'employee.csv';

   // 以写入模式打开 csv 文件
   $f = fopen($filename, 'w');

   if ($f === false) {
      die('打开文件错误 ' . $filename);
   }

   // 逐行写入文件
   foreach ($data as $row) {
      fputcsv($f, $row);
   }

   // 关闭文件
   fclose($f);
?>

执行上述程序后,应在当前工作目录中创建 "employee.csv" 文件。

向 CSV 文件追加数据

如果您想添加新数据而不覆盖文件,可以使用追加模式 ("a")。以下是实现方法 −

<?php
   $newData = ["Amrita", 29, "Delhi"];

   // 以追加模式打开文件
   $file = fopen("/PHP/PhpProjects/new_data.csv", "a"); 

   // 向文件中添加新数据
   fputcsv($file, $newData); 

   fclose($file);
   echo "新数据添加成功!";
?> 

输出

以下是上述代码的输出 −

New data added successfully!

删除 CSV 文件

这里我们将展示如何使用 unlink() 函数删除或取消链接 CSV 文件。以下是代码 −

<?php
   $file = "old_data.csv";

   if (file_exists($file)) {
      
      // 删除文件
      unlink($file); 
      echo "文件删除成功!";
   } else {
      echo "文件未找到!";
   }
?> 

输出

这将产生以下输出 −

File deleted successfully!