jasny / iterator-stream
此包已被废弃,不再维护。未建议替代包。
迭代器的输出流,格式化和逐个元素写入
dev-master
2020-10-08 14:15 UTC
Requires
- php: >=7.1.0
- jasny/php-functions: ^4.1
Requires (Dev)
- ext-gd: *
- jasny/php-code-quality: ^2.3
- mikey179/vfsstream: ^1.6
This package is auto-updated.
Last update: 2024-08-29 21:06:08 UTC
README
迭代器的输出流,逐个元素格式化和写入。
如果您正在寻找可遍历的输入流,请查看 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);