PHP - 處理 CSV 檔案
你好啊,未來的 PHP 巫師們!今天,我們將要踏上一段令人興奮的旅程,進入 CSV 檔案的世界,並學習如何使用 PHP 來處理它們。作為你們親切鄰居的電腦老師,我答應讓這次冒險盡可能有趣且啟發人心。所以,拿起你們的虛擬魔杖(鍵盤),我們一起來探索吧!
什麼是 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);
?>
讓我們分解一下:
- 我們使用
fopen()
以讀取模式打開檔案 "data.csv"。 - 我們使用 while 迴圈逐行讀取檔案。
-
fgetcsv($file)
讀取一行並將其轉換為數組。 - 我們使用
print_r()
打印每個數組。 - 最後,我們使用
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 檔案創建成功!";
?>
讓我們分解一下:
- 我們創建了一個數組,其中包含了數組,每個內部數組代表我們 CSV 中的行。
- 我們打開一個新檔案 'new_data.csv',並將其設為寫入模式。
- 我們通過循環我們的數據數組,使用
fputcsv()
將每行寫入檔案。 - 我們關閉檔案,並打印一個成功消息。
高級使用方法
讓我們來點花巧,為我們的 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