PHP – Handle CSV File

Các chương trình bảng tính phổ biến sử dụng định dạng tệp CSV (viết tắt của Comma Separated Values - Giá trị phân tách bằng dấu phẩy) để xuất dữ liệu bảng tính dưới dạng văn bản thuần túy. Mỗi dòng trong tệp đại diện cho một hàng của bảng tính, với các giá trị trong mỗi cột được phân tách bằng dấu phẩy.

Thư viện chức năng hệ thống tệp của PHP cung cấp hai hàm – fgetcsv() fputcsv() – lần lượt để đọc dữ liệu từ tệp CSV vào một mảng và đưa các phần tử của mảng vào một tệp CSV.

The fgetcsv() Function

Hàm getcsv() đọc dòng từ con trỏ tệp và phân tích nó thành các trường CSV.

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

Tham số $stream là một tay cầm đến tài nguyên tệp, được mở trong read mode . Ký hiệu phân tách mặc định để phân tích các trường là dấu phẩy, bạn có thể chỉ định bất kỳ ký hiệu nào khác nếu cần.

Hàm fgetcsv() trả về một mảng chỉ mục chứa các trường. Nếu hàm gặp bất kỳ lỗi nào, nó trả về false .

Để minh họa việc sử dụng hàm fgetcsv(), hãy lưu đoạn văn bản sau dưới dạng "hello.txt" trong thư mục làm việc hiện tại.

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

Example

Đoạn mã PHP sau đây đọc dữ liệu CSV từ tệp này và trả về một mảng. Các trường trong mảng sau đó được hiển thị trong một bảng 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>";
?>

Nó sẽ tạo ra output

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

The fputcsv() Function

Hàm fputcsv() đưa một mảng chỉ mục với các phần tử của nó được phân tách bằng dấu phẩy, tại vị trí con trỏ tệp hiện tại của một tệp CSV.

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

Tệp mục tiêu phải được mở ở chế độ ghi. Tham số bắt buộc thứ hai là một mảng gồm các trường được phân tách bằng dấu phẩy. Giống như trong trường hợp của hàm fgetcsv(), dấu phân cách mặc định là dấu phẩy.

Example

Trong đoạn mã sau, một mảng hai chiều chứa các giá trị phân tách bằng dấu phẩy được ghi vào một tệp 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);
?>

Tệp "employee.csv" sẽ được tạo trong thư mục làm việc hiện tại sau khi chương trình trên được thực thi.