PHP:
处理CSV文件

如何操作:

PHP 提供了内置函数处理 CSV 文件,使得读取和写入这些文件变得简单,无需第三方库。以下是一些入门示例:

读取 CSV 文件

你可以使用 fopen() 结合 fgetcsv() 打开 CSV 文件并读取其内容:

<?php
$filename = 'data.csv';
$handle = fopen($filename, "r");
if ($handle !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "行中字段数量: $num\n";
        for ($c = 0; $c < $num; $c++) {
            echo $data[$c] . "\n";
        }
    }
    fclose($handle);
}
?>

该脚本打印出每行的字段数量,接着打印每个字段的内容。

写入 CSV 文件

要写入 CSV 文件,使用 fopen() 的写模式(w)和 fputcsv()

<?php
$list = [
    ['ID', '姓名', '电子邮件'],
    [1, 'John Doe', '[email protected]'],
    [2, 'Jane Doe', '[email protected]']
];

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

foreach ($list as $row) {
    fputcsv($handle, $row);
}

fclose($handle);
?>

该脚本创建一个名为 users.csv 的文件,并向其写入标题和两行数据。

使用库:League\Csv

对于更高级的 CSV 处理,League\Csv 库提供了一套强大的功能。通过 Composer 安装它(composer require league/csv)后,你可以更灵活地读写 CSV 数据。

使用 League\Csv 读取

<?php
require 'vendor/autoload.php';

use League\Csv\Reader;

$csv = Reader::createFromPath('data.csv', 'r');
$csv->setHeaderOffset(0); // 如果你想使用第一行作为表头,请设置这个

$results = $csv->getRecords();
foreach ($results as $row) {
    print_r($row);
}
?>

该脚本读取 data.csv,将第一行视为列标题,并将每行打印为关联数组。

使用 League\Csv 写入

<?php
require 'vendor/autoload.php';

use League\Csv\Writer;

$csv = Writer::createFromPath('users_new.csv', 'w+');

$csv->insertOne(['ID', '姓名', '电子邮件']);
$csv->insertAll([
    [3, 'Alex Doe', '[email protected]'],
    [4, 'Anna Smith', '[email protected]']
]);

echo "成功写入 users_new.csv。";
?>

这将创建 users_new.csv 并写入一个标题行,随后是两行数据。