jasny/iterator-stream

此包已被废弃,不再维护。未建议替代包。

迭代器的输出流,格式化和逐个元素写入

dev-master 2020-10-08 14:15 UTC

This package is auto-updated.

Last update: 2024-08-29 21:06:08 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Packagist Stable Version Packagist License

迭代器的输出流,逐个元素格式化和写入。

如果您正在寻找可遍历的输入流,请查看 SplFileObject

安装

composer require jasny/iterator-stream

用法

$handler = fopen('path/to/some/file.txt');
$stream = new LineOutputStream($handler);

$iterable = ['hello, 'sweet', 'world'];

$stream->write($iterator);

write() 方法接受一个数组或 Traversable 对象(不仅仅是 Iterators)。

所有迭代器流对象在构造函数中接受一个流资源或 URI(字符串)作为第一个参数。

new LineOutputStream('php://output');
new CsvOutputStream('file://path/to/some/file.csv');

如果传递了 URI,迭代器流将使用 fopen 打开它。对于常规文件,也需要使用方案。

要与 PSR-7 流 一起使用,您需要断开底层资源的连接并将其传递给构造函数。

$handler = $psr7stream->detach();
$stream = new LineOutputStream($handler);

原型模式

迭代器输出流支持原型设计模式。它们可以在不连接流资源的情况下创建。使用 withStream 可以创建一个带有给定资源附加的输出流副本。

$prototype = new JsonOutputStream();

$stream = $prototype->withStream($resource);
$stream->write($iterable);

原型模式使得库更容易在 SOLID 应用中使用依赖反转。

输出流

逐行写入流。

LineOutputStream(resource|string $stream, string $endLine = "\n")

CSV

以 CSV 格式写入流。请参阅 fputcsv()

CsvOutputStream(
    resource|string $stream,
    string $delimiter = ',',
    string $enclosure = '"',
    string $escapeChar = '\\'
)

write() 方法可以可选地接受标题作为第二个参数。这些标题将作为第一行写入。

$output = new CsvOutputStream($stream);
$output->write($data, ['name', 'age', 'email']);

可迭代中的每个元素都必须是一个具有固定数量值的数组。如果元素是关联数组或对象,则忽略键,请使用 jasny\iterable-functions 中的 iterable_project

JSON

以 JSON 数组格式写入流。请参阅 json_encode

JsonOutputStream(resource|string $stream, int $options = 0)

可以使用 JSON_* 常量作为二进制集提供选项。

您可以将 JsonOutputStream::OUTPUT_LINES 作为选项添加,在这种情况下,每个元素都作为一行输出,而不将完整输出转换为 JSON 数组。

$output = new JsonOutputStream($stream, \JSON_PRETTY_PRINT | JsonOutputStream::OUTPUT_LINES);