talkingbit / csv
读取和写入 CSV 文件
v1.0.2
2020-06-25 10:24 UTC
Requires
- php: >=7.1
Requires (Dev)
- mikey179/vfsstream: ^1.6
- phpstan/phpstan: ^0.12.31
- phpunit/phpunit: ^9.2
This package is auto-updated.
Last update: 2024-09-11 00:01:56 UTC
README
一个包含管理读取和写入 CSV 文件类别的包。
安装
使用 composer 将其添加到您的项目中
composer require talkingbit/csv
基本用法
Reader
Reader 允许我们读取文件系统中指定文件的內容。內容通过生成器返回。典型用法如下。行将以纯数组的形式读取。
use TalkingBit\Csv\Reader\Reader; $reader = new Reader(); $filePath = '/path/to/file.csv'; $rows = $reader ->fromFile($filePath) ->readAll(); foreach ($rows as $row) { // Do whatever you need }
如果文件有 CSV 头部,可以使用以下设置,这样行将以关联数组的形式读取
use TalkingBit\Csv\Reader\Reader; $reader = new Reader(); $filePath = '/path/to/file.csv'; $rows = $reader ->fromFile($filePath) ->withHeaders() ->readAll(); foreach ($rows as $row) { // Do whatever you need }
此外,您可以将行映射到一个简单的 Dto,前提是所有相关字段都是公共的
use TalkingBit\Csv\Reader\Reader; use TalkingBit\Csv\Reader\Mapper\DtoMapper; $reader = new Reader(); $filePath = '/path/to/file.csv'; $rows = $reader ->fromFile($filePath) ->withHeaders() ->usingMapper(new DtoMapper(MyDto::class)) ->readAll(); foreach ($rows as $row) { // Do whatever you need }
Writer
Writer 允许我们将数据写入 CSV 文件。
一行可以是一个纯数组
use TalkingBit\Csv\Writer\Writer; $writer = new Writer(); $writer ->toFile('/path/to/file.csv') ->writeRow([123, 'My name']);
一行可以是一个关联数组。在这种情况下,键将用作 CSV 头部。
use TalkingBit\Csv\Writer\Writer; $writer = new Writer(); $writer ->toFile('/path/to/file.csv') ->writeRow(['id' => 123, 'name' => 'My name']);
此外,您可以直接将 Dto 写入 CSV 文件。Dto 将被视为关联数组。
use TalkingBit\Csv\Writer\Writer; $writer = new Writer(); $dto = new MyDto(); $dto->id = 123; $dto->name = 'My name'; $writer ->toFile('/path/to/file.csv') ->writeRow($dto);
配置
您可以自定义分隔符和封装字符
$writer ->toFile('/path/to/file.csv') ->withDelimiter(',') ->withEnclosure('"') ->writeRow($dto);
为 Reader 定制映射器
您可以创建实现以下接口的定制映射器
interface RowMapperInterface { public function map(array $line, ?array $headers = null); }
$line
参数包含文件中的行数据。如果找到,则 $headers
包含 CSV 头部。您可以返回任何类型,因此您可以自由地执行如下操作
- 构建应用程序对象。
- 使用输入数据进行计算。
- 验证输入数据。
贡献
请随意打开问题或拉取请求。