PHP – 处理CSV文件



流行的电子表格程序使用 CSV 文件格式(代表逗号分隔值)以纯文本格式导出工作表数据。文件中的每一行表示工作表的一行,每列中的值以逗号分隔。

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

fgetcsv() 函数

getcsv() 函数从文件指针读取行,并将其解析为 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, [email protected], Manager, 40000
Kavita, [email protected], Assistant, 25000
Nandkumar, [email protected], Programmer, 30000

示例

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

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

   // open the file
   $f = fopen($filename, 'r');

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

   // read each line in CSV file at a time
   while (($row = fgetcsv($f)) !== false) {
      $data[] = $row;
   }

   // close the file
   fclose($f);
   echo "<table border=1>";
   foreach ($data as $row) {
      echo "<tr>";
      foreach($row as $val) {
         echo "<td>$val</td>"; 
      }
      echo "</tr>";
   }
   echo "</table>";
?>

它将生成以下输出 -

姓名 电子邮件 职位 薪资
Ravishankar [email protected] 经理 40000
Kavita [email protected] 助理 25000
Nandkumar [email protected] 程序员 30000

fputcsv() 函数

Te 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", "[email protected]", "Manager", "40000"],
      ["Kavita", "[email protected]", "Assistant", "25000"],
      ["Nandkumar", "[email protected]", "Programmer", "30000"],
   ];
   $filename = 'employee.csv';

   // open csv file for writing
   $f = fopen($filename, 'w');

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

   // write each row at a time to a file
   foreach ($data as $row) {
      fputcsv($f, $row);
   }

   // close the file
   fclose($f);
?>

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

广告