Lấy thông tin CSV file PHP

PHP – Lấy thông tin từ CSV file chuẩn nhất

Hi các bạn,

Hôm nay có dịp đụng lại CSV, cụ thể là import CSV để thêm dữ liệu. Nên sẵn dịp log lại 1 bài luôn ý mà.

CSV (Comma-seperated values) là một dạng file khá phổ biến từ lâu đời nay, cụ thể là nó lưu 1 danh sách, các giá trị của nó được phân cách bởi dấu “,”. Không chỉ vậy CSV cũng có thể được phân cách bằng character “TAB” (\t). Nhưng dùng dấu phẩy vẫn là thông dụng nhất.

Vẫn còn rất nhiều hệ thống người ta ưu tiên sử dụng file này để import vì:

  • Nhẹ
  • Đơn giản
  • Hỗ trợ rộng rãi từ Excel, Google Spreadsheet, OpenOffice,…. Thậm chí Notepad mở lên xem bình thường
  • Đỡ fải thông qua 1 Library nào đó để đọc xls hay xlsx (giảm dependencies)

Tất nhiên nó ko fải vô đối, vẫn có cái dở của nó. Nhưng thoy kệ đi vào bài chính đã 😀

1/ PHP Native function fgetcsv

Đúng vậy, PHP có sẵn function này cho các bạn sử dụng. Hàm này available từ PHP tới giờ nhé. Khá ok.

Mặc định cái delimiter sẽ là dấu phẩy “,”. Các bạn muốn thay đổi thì bỏ delimiter của bạn vào tham số thứ 3 nhé. Tìm hiểu thêm function này tại: https://www.php.net/manual/en/function.fgetcsv.php

Vậy để get csv ra array thì ta làm như sau:

<?php
// read file with R flag
$file = fopen("sethphat_your_file.csv","r");

// loop to the end
while(! feof($file))
{
	// retrieve csv 
	$csv = fgetcsv($file);
	
	// now u can use $csv[0], $csv[1]....
}

// close file
fclose($file);

Khá đơn giản fải ko nào. Khi process nhớ check cho kỹ nhé kẻo bị offset error 😀

2/ Test cases về vụ Lấy thông tin CSV file

Mình đã test trên các trường hợp sau:

  • CSV bình thường, cơ bản: ✔ (nhanh và ngon lành)
  • CSV độ phức tạp cao, có column lẫn lộn xuống dòng và có cả dấu “,” (nguy hiểm): ✔ (ngon lành, ko mắc lỗi này và vẫn nhận ra 1 row tốt, một số cách khác như str_getcsv có thể bị mắc vào lỗi này). Đôi khi ta cũng đừng tin tưởng vào 1-line-code.

Advantages khi các bạn xài cách này:

  • Đọc CSV chuẩn row, ko lo sai data
  • Không fải lệ thuộc bất kỳ library nào vì cái này đã build-in sẵn trong PHP, very good
  • Đọc file theo con trỏ (fopen, fget,…). Rất có lợi cho các bạn đọc file lớn mà ko lo bị dirrupted or out of memory. Những cách 1 dòng đa phần nó sẽ đọc cả file và đưa vào memory => tràn bộ nhớ là chuyện bt.
  • Vừa đọc file vừa xử lý (import, process,…) luôn.

Disadvantages khi các bạn xài cách này:

  • Chưa nghĩ ra, chắc code dài hơn mấy đoạn 1-line-code =))

3/ Finalization về Lấy thông tin CSV file

Theo cách này, điều mình và các bạn nên quan tâm nhất đó là: chuẩn data và đọc theo con trỏ. Nó sẽ rất có lợi đấy nhé 😀

Cám ơn các bạn đã quan tâm vềbài viết này: “Lấy thông tin CSV file”

facebook
google+
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

Leave a Reply

Your email address will not be published. Required fields are marked *

Bình luận qua Facebook