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

PHP 將陣列匯出為 CSV 檔案的標準做法

     編輯:PHP 相關知識

前言

將陣列資料匯出為 CSV 是常見報表功能。PHP 的 fputcsv() 會自動處理欄位包含逗號、引號、換行的跳脫,是產生標準 CSV 的最佳工具。本文示範完整匯出流程。

完整匯出範例

<?php
// 範例資料:多維陣列,每子陣列為一列
$sales = [
    ['east',  '2005-01-01', '2005-02-01', 12.54],
    ['west',  '2005-01-01', '2005-02-01', 546.33],
    ['south', '2005-01-01', '2005-02-01', 93.26],
    ['north', '2005-01-01', '2005-02-01', 945.21],
    ['All Regions', '--', '--', 1597.34],
];

$filename = 'sales_report.csv';

$handle = fopen($filename, 'w');
if (!$handle) {
    die("無法建立檔案: $filename");
}

// 選寫:寫入標題列
fputcsv($handle, ['Region', 'Start Date', 'End Date', 'Amount']);

foreach ($sales as $row) {
    if (fputcsv($handle, $row) === false) {
        die("CSV 寫入失敗");
    }
}

fclose($handle);
echo "匯出完成:$filename";
?>

直接輸出下載(不落地儲存)

<?php
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="sales_report.csv"');
header('Pragma: no-cache');
header('Expires: 0');

$out = fopen('php://output', 'w');

// 為了 Excel 正確識別 UTF-8,加入 BOM
fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));

fputcsv($out, ['Region', 'Start Date', 'End Date', 'Amount']);
foreach ($sales as $row) {
    fputcsv($out, $row);
}

fclose($out);
exit;
?>

關鍵細節

  • fputcsv() 跳脫規則:欄位含逗號、雙引號、換行時會自動用雙引號包裹,雙引號內部以雙雙引號 "" 表示。
  • UTF-8 BOM:Excel 開啟 UTF-8 CSV 需要 BOM(EF BB BF),否則中文會亂碼。
  • php://output:直接輸出到瀏覽器,不佔用伺服器磁碟空間。
  • 記憶體效率:逐列寫入,不需將整個 CSV 字串載入記憶體,適合大量資料。

進階:自訂分隔符與包裹字元

<?php
// 使用分號分隔(歐洲常見),單引號包裹
fputcsv($handle, $row, ';', "'");
?>

總結

fputcsv() 配合 php://output 是 PHP 匯出 CSV 的標準最佳實務,自動處理跳脫、支援串流輸出、記憶體友善。希望本文對您的 PHP 程式設計有所幫助。

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