wilgucki / php-csv
面向对象管理CSV文件的方法
Requires
- php: >=7.0
- nesbot/carbon: ^2.17
Requires (Dev)
- phpunit/phpunit: ^7.1
This package is auto-updated.
Last update: 2024-09-04 17:25:55 UTC
README
PHP-CSV是一个允许以面向对象的方式管理CSV文件的包。
安装
无需做太多,只需运行以下composer命令
composer require wilgucki/php-csv
使用方法
Reader和Writer类都很容易使用。实际上,这些类只是内置PHP函数的封装。
Reader
Reader类可以帮助您读取现有的CSV文件(这里没有惊喜)。
要读取CSV文件,您首先需要打开它。
$reader = new Reader(); $reader->open('/path/to/file.csv');
构造函数接受可选参数,您可以使用这些参数来描述您的CSV文件。这些参数包括
$delimiter$enclosure$escape$encodingFrom$encodingTo
前三个参数与手册中描述的fgetcsv函数的参数完全相同 - https://php.ac.cn/manual/en/function.fgetcsv.php
其他两个参数有助于您定义编码 - $encodingFrom 是CSV文件的编码,而 $encodingTo 是读取文件后得到的编码。
要从CSV文件中读取数据,我们可以使用两个函数: readLine 和 readAll。前者将读取并返回当前行,而后者将读取整个CSV文件并返回一个数组数组(每行将表示为一个数组)。
如果CSV文件有一个标题行,您可以使用 getHeader 函数。此函数将使用CSV文件的第一行并将其用作 readLine 和 readAll 函数的数组键。这意味着您可以使用第一行中定义的标签而不是数字键。
转换器
有时CSV文件中的数据需要转换为更合适的格式,例如将日期转换为Carbon对象。转换器使这项任务变得容易得多。您只需创建转换器对象并指定要转换的列。
$reader = new Reader(); $reader->open('/path/to/file.csv'); $reader->addConverter(3, new DateToCarbon()); $data = $reader->readLine();
每个列只能分配一个转换器。
示例
CSV文件示例
user_id,name
1,john
2,jane
$reader = new Reader(); $reader->open('/path/to/file.csv'); print_r($reader->readLine()); /* Array ( [0] => user_id [1] => name ) */ print_r($reader->readLine()); /* Array ( [0] => 1 [1] => john ) */
$reader = new Reader(); $reader->open('/path/to/file.csv'); print_r($reader->readAll()); /* Array ( [0] => Array ( [0] => user_id [1] => name ) [1] => Array ( [0] => 1 [1] => john ) [2] => Array ( [0] => 2 [1] => jane ) ) */
$reader = new Reader(); $reader->open('/path/to/file.csv'); print_r($reader->getHeader()); /* Array ( [0] => user_id [1] => name ) */
$reader = new Reader(); $reader->open('/path/to/file.csv'); $reader->getHeader(); print_r($reader->readLine()); /* Array ( [user_id] => 1 [name] => john ) */
$reader = new Reader(); $reader->open('/path/to/file.csv'); $reader->getHeader(); print_r($reader->readAll()); /* Array ( [0] => Array ( [user_id] => 1 [name] => john ) [1] => Array ( [user_id] => 2 [name] => jane ) ) */
完成工作后,别忘了关闭CSV文件。
$reader->close();
Writer
要创建/更新CSV文件,您可以使用Writer类。如果您想创建文件,则需要提供可写路径。要更新现有文件,您必须使用可选的 $mode 参数。所有可用模式都在手册中有描述(https://secure.php.net/manual/en/function.fopen.php),但只有 'w' 和 'a' 值在这种情况下可使用。
$writer = new Writer(); // create new file $writer->create('/path/to/file.csv'); // update existing file $writer->create('/path/to/file.csv', 'a+');
Writer 构造函数接受与 Reader 构造函数相同的参数。唯一的区别是 $encodingFrom 指的是输入编码,而 $encodingTo 指的是CSV文件的编码。
有两种方法可以写入CSV文件 - writeLine 和 writeAll。第一种方法将单行写入CSV文件,而第二种方法将多行写入。如果出于某种原因需要访问写入CSV文件中的数据,可以使用 flush 方法。
示例
// write a single line to the CSV file $writer = new Writer(); $writer->create('/path/to/file.csv'); $writer->writeLine(['abc', 'def']);
// write multiple lines to the CSV file $writer = new Writer(); $writer->create('/path/to/file.csv'); $writer->writeAll([ ['abc', 'def'], [123, 234] ]);
// display added data $writer = new Writer(); $writer->create('/path/to/file.csv'); $writer->writeAll([ ['abc', 'def'], [123, 234] ]); echo $writer->flush(); /* abc,def 123,234 */
完成工作后,别忘了关闭CSV文件。
$writer->close();
待办事项
- 处理器 - 处理CSV数据并返回结果