ZetCode

PHP fputcsv 函数

最后修改于 2025 年 4 月 3 日

PHP 的 fputcsv 函数将一行格式化为 CSV 并将其写入文件。它负责正确转义特殊字符和分隔符。

基本定义

fputcsv 函数将一个数组作为 CSV 行写入一个打开的文件。它接受文件句柄、数据数组和可选的 CSV 设置作为参数。

语法:fputcsv(resource $handle, array $fields, string $delimiter = ",", string $enclosure = '"', string $escape_char = "\\"): int|false

基本的 fputcsv 示例

这展示了 fputcsv 将数据写入文件的最简单用法。

basic_fputcsv.php
<?php

declare(strict_types=1);

$data = ['Name', 'Email', 'Phone'];
$file = fopen('contacts.csv', 'w');

if ($file !== false) {
    fputcsv($file, $data);
    fclose($file);
    echo "CSV file created successfully.";
}

这将创建一个带有标题行的 CSV 文件。如果需要,该函数会自动处理引号和特殊字符的转义。

写入多行

您可以通过在循环中调用 fputcsv 来写入多行。

multiple_rows.php
<?php

declare(strict_types=1);

$users = [
    ['John Doe', 'john@example.com', '555-1234'],
    ['Jane Smith', 'jane@example.com', '555-5678']
];

$file = fopen('users.csv', 'w');

if ($file !== false) {
    foreach ($users as $user) {
        fputcsv($file, $user);
    }
    fclose($file);
    echo "User data exported to CSV.";
}

这会将两行用户数据写入 CSV 文件。每个数组元素都成为 CSV 行中的一列。

自定义分隔符和引号

您可以为特殊格式指定自定义分隔符和引号字符。

custom_format.php
<?php

declare(strict_types=1);

$data = ['Product', 'Price', 'Stock'];
$products = [
    ['Laptop', '999.99', '15'],
    ['Mouse', '24.95', '42']
];

$file = fopen('inventory.tsv', 'w');

if ($file !== false) {
    fputcsv($file, $data, "\t");
    foreach ($products as $product) {
        fputcsv($file, $product, "\t");
    }
    fclose($file);
    echo "TSV file created with tab delimiter.";
}

这将创建一个 TSV(制表符分隔值)文件而不是 CSV。第三个参数指定制表符作为分隔符。

处理特殊字符

fputcsv 会自动处理包含分隔符或引号的字段。

special_chars.php
<?php

declare(strict_types=1);

$problematicData = [
    ['ID', 'Description'],
    [1, 'Item with "quotes"'],
    [2, 'Comma, in description']
];

$file = fopen('special.csv', 'w');

if ($file !== false) {
    foreach ($problematicData as $row) {
        fputcsv($file, $row);
    }
    fclose($file);
    echo "CSV with special characters created.";
}

该函数可以正确转义数据中的引号和逗号。生成的 CSV 将被正确格式化以供解析。

使用不同的转义字符

您可以在特殊情况下指定自定义转义字符。

custom_escape.php
<?php

declare(strict_types=1);

$data = [
    ['ID', 'Text'],
    [1, 'This contains "quotes"'],
    [2, 'Back\\slash example']
];

$file = fopen('escape_example.csv', 'w');

if ($file !== false) {
    foreach ($data as $row) {
        fputcsv($file, $row, ',', '"', '/');
    }
    fclose($file);
    echo "CSV with custom escape character created.";
}

在这里,我们使用斜杠作为转义字符,而不是默认的反斜杠。这对于特定的 CSV 解析要求可能很有用。

最佳实践

来源

PHP fputcsv 文档

本教程介绍了 PHP 的 fputcsv 函数,并通过实际示例展示了其在不同 CSV 写入场景中的用法。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面有十多年的经验。

列出 所有 PHP 文件系统函数