webgriffe/amp-csv

与Amp PHP框架一起使用的CSV库。

v0.1.3 2019-02-15 14:47 UTC

This package is auto-updated.

Last update: 2024-09-26 14:44:29 UTC


README

Build Status

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)。