CSV 是資料匯出常用格式。PHP 的 fputcsv() 可將陣列寫入檔案資源,自動處理欄位包含逗號、引號、換行等特殊字元。本文示範從來源 CSV 讀取、處理後寫入新檔的完整流程。
<?php
ini_set('max_execution_time', 300); // 避免大檔案超時
$inputFile = 't.csv';
$outputFile = 'torah1.csv';
$inHandle = fopen($inputFile, 'r');
$outHandle = fopen($outputFile, 'w');
if (!$inHandle || !$outHandle) {
die('檔案開啟失敗');
}
$row = 0;
while (($data = fgetcsv($inHandle, 1000, ',')) !== FALSE) {
$row++;
$num = count($data);
// 假設 CSV 欄位結構:us, item(空格分隔), value, cate1
$us = $data[0] ?? '';
$item = isset($data[1]) ? explode(' ', $data[1]) : [];
$value = $data[2] ?? '';
$cate1 = $data[3] ?? '';
// 只取 item 前 4 個子欄位
$outRow = [
$us,
$item[0] ?? '',
$item[1] ?? '',
$item[2] ?? '',
$item[3] ?? '',
];
fputcsv($outHandle, $outRow);
// 示例:只處理前 1838 列
if ($row > 1838) break;
}
fclose($inHandle);
fclose($outHandle);
echo "處理完成,共 $row 列資料已寫入 $outputFile";
?>
| 函數 | 用途 |
|---|---|
| fopen($file, 'r') | 以唯讀模式開啟檔案,返回資源控制代碼 |
| fgetcsv($handle, $length, $delimiter) | 逐行讀取並解析 CSV 為陣列 |
| fputcsv($handle, $fields, $delimiter, $enclosure) | 將陣列寫入 CSV 格式到檔案 |
| fclose($handle) | 關閉檔案資源,釋放系統控制代碼 |
iconv() 轉換。ini_set('memory_limit', '256M') 視情況調整。fputcsv($outHandle, ['欄位1','欄位2',...])。fputcsv() 返回值,失敗返回 FALSE。<?php
$in = new SplFileObject('t.csv');
$in->setFlags(SplFileObject::READ_CSV);
$out = new SplFileObject('torah1.csv', 'w');
foreach ($in as $row) {
// $row 已為陣列
$out->fputcsv($row);
}
?>
SplFileObject 物件導向風格,自動管理資源關閉,程式碼更簡潔。
掌握 fgetcsv() 與 fputcsv() 可高效完成 CSV 資料轉換、匯出入需求。希望本文對您的 PHP 程式設計有所幫助。