首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 將資料寫入 CSV 檔案的完整實作範例

     編輯:PHP 相關知識

前言

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)關閉檔案資源,釋放系統控制代碼

常見問題與最佳實務

  • 編碼一致性:確保讀寫編碼相同(如皆為 UTF-8),否則中文會亂碼。必要時使用 iconv() 轉換。
  • 大檔案處理:逐行讀寫避免記憶體耗盡,設定 ini_set('memory_limit', '256M') 視情況調整。
  • 標題列:若需寫入標題,先呼叫 fputcsv($outHandle, ['欄位1','欄位2',...])。
  • 錯誤處理:檢查 fputcsv() 返回值,失敗返回 FALSE。

現代替代:使用 SplFileObject

<?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 程式設計有所幫助。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved