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
并写入一个标题行,随后是两行数据。