webgriffe / amp-csv
与Amp PHP框架一起使用的CSV库。
v0.1.3
2019-02-15 14:47 UTC
Requires
- php: >=7
- amphp/amp: ^2.0
- amphp/file: ^0.3.0
Requires (Dev)
- amphp/phpunit-util: ^1.0
- phpunit/phpunit: ^6.5
- squizlabs/php_codesniffer: ^3.2
This package is auto-updated.
Last update: 2024-09-26 14:44:29 UTC
README
CSV库,用于与Amp PHP框架一起使用。目前它只实现了一个迭代器,允许逐行解析CSV行。
安装
使用 Composer 需要此包
composer require webgriffe/amp-csv
迭代器使用
此库实现了一个Amp的 迭代器,允许逐行遍历CSV行。因为它只保留内存中的小部分数据,所以它可以解析非常大的CSV文件。以下是一个示例,给定这个CSV文件(path/to/file.csv
)
Name,Description,Price,Stock
RaspberryPi,"Raspberry PI Modell B, 512 MB",37.05,12
SanDisk Ultra SDHC,SanDisk Ultra SDHC 8 GB 30 MB/s Classe 10,6.92,54
我们可以有
<?php use Webgriffe\AmpCsv\Iterator; use Webgriffe\AmpCsv\Parser; use Amp\File; require_once 'vendor/autoload.php'; \Amp\Loop::run(function () { $iterator = new Iterator(new Parser(yield File\open('path/to/file.csv', 'rb'))); while (yield $iterator->advance()) { $rows[] = $iterator->getCurrent(); } var_dump($rows); });
输出将是
array(
array(
'Name' => 'RaspberryPi',
'Description' => 'Raspberry PI Modell B, 512 MB',
'Price' => 37.05,
'Stock' => 12,
),
array(
'Name' => 'SanDisk Ultra SDHC',
'Description' => 'SanDisk Ultra SDHC 8 GB 30 MB/s Classe 10',
'Price' => 6.92,
'Stock' => 54,
),
),
默认情况下,迭代器将第一行视为标题,并使用列名来索引行值。如果某行的列数与标题不同,将抛出异常。如果你的CSV没有标题行,可以通过将构造函数的第二个参数传递为false
来禁用标题解析
$iterator = new Iterator(new Parser(yield File\open('path/to/file.csv', 'rb')), false);
贡献
要贡献,请简单地分叉此存储库,进行更改,然后提出拉取请求。你应该运行编码标准检查和测试
vendor/bin/phpcs --standard=PSR2 src vendor/bin/phpunit
许可证
此库受MIT许可证保护。请参阅LICENSE文件中的完整许可证。
致谢
由Webgriffe®开发。还要感谢Niklas Keller在将ReactPHP流事件转换为Amp的迭代器方面的帮助(请参阅reactphp/promise-stream#14)。