CSV(Comma-Separated Values)是常見的資料交換格式,PHP 內建 fgetcsv() 函式可輕鬆解析。本文整理兩種實用讀取寫法,分別適用於「逐行處理」與「指定欄位輸出」的情境。
適合需要檢視完整結構、或後續對每欄位做進一步處理的情況。
<?php
$row = 0;
$startLine = 1; // 從第幾行開始讀取(若有標題列可設為 2)
$file = 'data.csv'; // CSV 檔案路徑
if (($handle = fopen($file, 'r')) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
$row++;
if ($row < $startLine) continue; // 跳過標題列
print_r($data); // 輸出該列陣列結構
}
fclose($handle);
}
?>
關鍵參數說明:
fgetcsv($handle, 1000, ','):1000 為單行最大長度(依實際資料調整),',' 為分隔符號。fgetcsv 會自動正確處理。若只要特定欄位(如第 2 欄聯絡人姓名),可直接索引陣列元素,效率更高。
<?php
$fh = fopen('contacts.csv', 'r');
while ($line = fgetcsv($fh, 1000, ',')) {
// $line[0] 為第 1 欄,$line[1] 為第 2 欄,以此類推
echo "聯絡人: {$line[1]}<br>";
}
fclose($fh);
?>
若 CSV 為 Excel 匯出的 UTF-8 with BOM,讀取首行會包含隱形字元 \uFEFF。可用以下方式移除:
$data[0] = ltrim($data[0], "\xEF\xBB\xBF");
fgetcsv 為流式讀取,不會一次載入整個檔案,適合處理上百 MB 的大型 CSV。搭配 fclose() 釋放資源即可。
若為分號 ; 或 Tab \t 分隔,只需更改第 3 參數:
fgetcsv($handle, 1000, ';'); // 分號
fgetcsv($handle, 1000, "\t"); // Tab
PHP 讀取 CSV 核心在於 fopen() + fgetcsv() + fclose() 三步驟。方法一適合完整匯入資料庫、方法二適合快速擷取特定欄位顯示。實務上建議加入錯誤處理(如檔案不存在、權限不足)與編碼檢查,確保匯入流程穩健。