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, 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 = [];

   // 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 ravi@gmail.com 經理 40000
Kavita kavita@hotmail.com 助理 25000
Nandkumar nandu@example.com 程式設計師 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", "ravi@gmail.com", "Manager", "40000"],
      ["Kavita", "kavita@hotmail.com", "Assistant", "25000"],
      ["Nandkumar", "nandu@example.com", "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”檔案。

廣告