PHP - 處理 CSV 檔案

你好啊,未來的 PHP 巫師們!今天,我們將要踏上一段令人興奮的旅程,進入 CSV 檔案的世界,並學習如何使用 PHP 來處理它們。作為你們親切鄰居的電腦老師,我答應讓這次冒險盡可能有趣且啟發人心。所以,拿起你們的虛擬魔杖(鍵盤),我們一起來探索吧!

PHP - Handle CSV File

什麼是 CSV 檔案?

在我們開始編程之前,讓我們先了解一下我們將要處理的是什麼。CSV 代表「逗號分隔值」。它是一種簡單的檔案格式,用於存儲表格數據,如試算表或數據庫。檔案中的每一行代表表格中的一行,而每一行中的值則由逗號分隔。

例如,一個 CSV 檔案可能會長這樣:

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

既然我們已經知道了 CSV 檔案是什麼,那就讓我們學習如何在 PHP 中操作它們吧!

The fgetcsv() 函數

我們處理 CSV 檔案的第一個魔法咒語是 fgetcsv() 函數。這個函數從檔案中讀取一行,並使用指定的分隔符將其解析為數組。

基本使用方法

以下是如何使用 fgetcsv() 的簡單範例:

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

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

fclose($file);
?>

讓我們分解一下:

  1. 我們使用 fopen() 以讀取模式打開檔案 "data.csv"。
  2. 我們使用 while 迴圈逐行讀取檔案。
  3. fgetcsv($file) 讀取一行並將其轉換為數組。
  4. 我們使用 print_r() 打印每個數組。
  5. 最後,我們使用 fclose() 關閉檔案。

高級使用方法

現在,讓我們來點刺激的!如果我們的 CSV 使用了不同的分隔符,比如分號,該怎麼辦?沒問題!fgetcsv() 會為我們解決這個問題:

<?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);
?>

在這個範例中,我們為 fgetcsv() 添加了兩個額外的參數:

  • 第二個參數(1000)是要讀取的最大行長度。
  • 第三個參數(";")指定了分隔符。

我們還格式化了我們的輸出,使其更易於閱讀。這不是很棒嗎?

The fputcsv() 函數

既然我們已經掌握了讀取 CSV 檔案的方法,那麼讓我們學習如何創建它們吧!來認識一下 fputcsv(),我們寫入 CSV 檔案的魔法咒語。

基本使用方法

以下是一個簡單的範例:

<?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 檔案創建成功!";
?>

讓我們分解一下:

  1. 我們創建了一個數組,其中包含了數組,每個內部數組代表我們 CSV 中的行。
  2. 我們打開一個新檔案 'new_data.csv',並將其設為寫入模式。
  3. 我們通過循環我們的數據數組,使用 fputcsv() 將每行寫入檔案。
  4. 我們關閉檔案,並打印一個成功消息。

高級使用方法

讓我們來點花巧,為我們的 fputcsv() 函數添加一些選項:

<?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 "引言 CSV 檔案創建成功!";
?>

在這個範例中,我們為 fputcsv() 使用了以下額外參數:

  • 第三個參數 ('|') 將分隔符設為管道符。
  • 第四個參數 ('"') 設定了封裝字符。
  • 第五個參數 ('\') 設定了脫逸字符。

這在數據中可能包含逗號或其他特殊字符時非常有用。

結合所有知識

現在,讓我們將我們的讀寫技能結合起來,創建一個 CSV 檔案轉換器!

<?php
// 從分號分隔的 CSV 讀取
$input_file = fopen("input.csv", "r");
$output_file = fopen("output.csv", "w");

while (($data = fgetcsv($input_file, 1000, ";")) !== FALSE) {
// 寫入逗號分隔的 CSV
fputcsv($output_file, $data);
}

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

echo "CSV 檔案轉換成功!";
?>

這個腚本從分號分隔的 CSV 檔案中讀取,並將其內容寫入新的逗號分隔的 CSV 檔案。這是不是很神奇?

結論

恭喜你們,年輕的 PHP 巫師們!你們剛剛學會了在 PHP 中處理 CSV 檔案的基本知識。記住,熟練才能精通,所以不要害怕嘗試這些函數。誰知道呢?也許你會成為下一代 CSV 大師!

這裡是我們學過的方法的快速參考表:

函數 用途 基本語法
fgetcsv() 讀取 CSV 檔案 fgetcsv($file, $length, $delimiter, $enclosure, $escape)
fputcsv() 寫入 CSV 檔案 fputcsv($file, $fields, $delimiter, $enclosure, $escape)

快樂編程,願你的 CSV 檔案永遠格式正確!

Credits: Image by storyset