# PHP - Xử lý Tệp CSV

Xin chào các pháp sư PHP tương lai! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của các tệp CSV và cách xử lý chúng bằng PHP. Là giáo viên máy tính hàng xóm thân thiện của bạn, tôi hứa sẽ làm cho cuộc phiêu lưu này thú vị và đầy ánh sáng nhất có thể. Vậy, cầm lấy những cây phép thuật ảo của bạn (bàn phím), và cùng nhau lặn vào!

## Tệp CSV Là Gì?

Trước khi bắt đầu lập mã, hãy cùng hiểu chúng ta đang làm việc với cái gì. CSV viết tắt của "Comma-Separated Values." Đó là một định dạng tệp đơn giản được sử dụng để lưu trữ dữ liệu bảng, như bảng tính hoặc cơ sở dữ liệu. Mỗi dòng trong tệp đại diện cho một hàng của bảng, và các giá trị trong mỗi hàng được tách biệt bằng dấu phẩy.

Ví dụ, một tệp CSV có thể trông như thế này:

Name,Age,City John Doe,30,New York Jane Smith,25,London Bob Johnson,40,Paris

PHP - Handle CSV File


Bây giờ chúng ta đã biết tệp CSV là gì, hãy học cách làm việc với chúng trong PHP!

## Hàm fgetcsv()

Phép thuật đầu tiên của chúng ta để xử lý tệp CSV là hàm `fgetcsv()`. Hàm này đọc một dòng từ tệp và phân tích nó thành một mảng sử dụng một dấu phân tách đã chỉ định (thường là dấu phẩy).

### Cách Sử Dụng Cơ Bản

Dưới đây là một ví dụ đơn giản về cách sử dụng `fgetcsv()`:

```php
<?php
$file = fopen("data.csv", "r");

while (($data = fgetcsv($file)) !== FALSE) {
    print_r($data);
}

fclose($file);
?>

Giải thích:

  1. Chúng ta mở tệp "data.csv" trong chế độ đọc bằng fopen().
  2. Chúng ta sử dụng một vòng lặp while để đọc tệp từng dòng.
  3. fgetcsv($file) đọc một dòng và chuyển đổi nó thành một mảng.
  4. Chúng ta in mỗi mảng bằng print_r().
  5. Cuối cùng, chúng ta đóng tệp với fclose().

Cách Sử Dụng Nâng Cao

Bây giờ, hãy làm cho mọi thứ thú vị hơn một chút! Nếu tệp CSV của chúng ta sử dụng một dấu phân tách khác, ví dụ như dấu chấm phẩy, sao? Không có vấn đề gì! fgetcsv() đã sẵn sàng giúp chúng ta:

<?php
$file = fopen("data.csv", "r");

while (($data = fgetcsv($file, 1000, ";")) !== FALSE) {
    echo "Name: " . $data[0] . ", Age: " . $data[1] . ", City: " . $data[2] . "<br>";
}

fclose($file);
?>

Trong ví dụ này, chúng ta đã thêm hai tham số bổ sung vào fgetcsv():

  • Tham số thứ hai (1000) là độ dài tối đa của dòng để đọc.
  • Tham số thứ ba (";") xác định dấu phân tách.

Chúng ta cũng đang định dạng đầu ra của mình để dễ đọc hơn. Thật tuyệt vời phải không?

Hàm fputcsv()

Bây giờ chúng ta đã thành thạo việc đọc tệp CSV, hãy học cách tạo chúng! Đến với fputcsv(), phép thuật của chúng ta để viết tệp CSV.

Cách Sử Dụng Cơ Bản

Dưới đây là một ví dụ đơn giản:

<?php
$data = array(
    array('Name', 'Age', 'City'),
    array('John Doe', '30', 'New York'),
    array('Jane Smith', '25', 'London'),
    array('Bob Johnson', '40', 'Paris')
);

$file = fopen('new_data.csv', 'w');

foreach ($data as $row) {
    fputcsv($file, $row);
}

fclose($file);

echo "CSV file created successfully!";
?>

Giải thích:

  1. Chúng ta tạo một mảng của các mảng, nơi mỗi mảng con đại diện cho một hàng trong tệp CSV.
  2. Chúng ta mở một tệp mới 'new_data.csv' trong chế độ ghi.
  3. Chúng ta lặp qua mảng dữ liệu và sử dụng fputcsv() để ghi mỗi hàng vào tệp.
  4. Chúng ta đóng tệp và in một thông báo thành công.

Cách Sử Dụng Nâng Cao

Hãy làm cho mọi thứ trở nên tinh tế hơn và thêm một số tùy chọn vào hàm fputcsv() của chúng ta:

<?php
$data = array(
    array('Name', 'Favorite Quote'),
    array('Shakespeare', 'To be, or not to be'),
    array('Einstein', 'Imagination is more important than knowledge')
);

$file = fopen('quotes.csv', 'w');

foreach ($data as $row) {
    fputcsv($file, $row, '|', '"', '\\');
}

fclose($file);

echo "Quotes CSV file created successfully!";
?>

Trong ví dụ này, chúng ta đang sử dụng các tham số bổ sung của fputcsv():

  • Tham số thứ ba ('|') đặt dấu phân tách là ký tự gạch vert.
  • Tham số thứ tư ('"') đặt ký tự bao bọc.
  • Tham số thứ năm ('\') đặt ký tự escape.

Điều này rất hữu ích khi dữ liệu của bạn có thể chứa dấu phẩy hoặc các ký tự đặc biệt khác.

Kết Hợp Tất Cả

Bây giờ, hãy kết hợp kỹ năng đọc và viết của chúng ta để tạo một bộ chuyển đổi tệp CSV!

<?php
// Đọc từ tệp CSV phân tách bằng dấu chấm phẩy
$input_file = fopen("input.csv", "r");
$output_file = fopen("output.csv", "w");

while (($data = fgetcsv($input_file, 1000, ";")) !== FALSE) {
    // Ghi vào tệp CSV phân tách bằng dấu phẩy
    fputcsv($output_file, $data);
}

fclose($input_file);
fclose($output_file);

echo "CSV file converted successfully!";
?>

Chương trình này đọc một tệp CSV phân tách bằng dấu chấm phẩy và ghi nội dung vào một tệp CSV phân tách bằng dấu phẩy mới. Phép thuật, phải không?

Kết Luận

Chúc mừng, các pháp sư PHP trẻ! Bạn vừa học được những nguyên tắc cơ bản của việc xử lý tệp CSV trong PHP. Nhớ rằng, thực hành là cách tốt nhất để trở nên hoàn hảo, vì vậy đừng ngần ngại thử nghiệm với các hàm này. Ai biết được? Bạn có thể trở thành pháp sư CSV vĩ đại tiếp theo!

Dưới đây là bảng tóm tắt các phương thức chúng ta đã học:

Hàm Mục Đích Cú Pháp Cơ Bản
fgetcsv() Đọc tệp CSV fgetcsv($file, $length, $delimiter, $enclosure, $escape)
fputcsv() Ghi tệp CSV fputcsv($file, $fields, $delimiter, $enclosure, $escape)

Chúc các bạn lập mã vui vẻ, và hy vọng các tệp CSV của bạn luôn được định dạng chính xác!

Credits: Image by storyset