nikic / iter
使用生成器的迭代原语
v2.4.1
2024-03-19 20:45 UTC
Requires
- php: >=7.1
Requires (Dev)
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^7.0 || ^8.0 || ^9.0
- vimeo/psalm: ^4.18 || ^5.13
README
这个库实现了迭代原语,如 map()
和 filter()
,使用生成器。在很大程度上,它是一个生成器使用的小示例的仓库,但当然,这些函数在实用上也相当有用。
这个库中的所有函数都接受任意可迭代对象,即数组、可遍历对象、迭代器和聚合,这使得它与像 array_map()
(只接受数组)和SPL迭代器(通常只接受迭代器,甚至不接受聚合)这样的函数相当不同。操作当然是惰性的。
安装
使用 composer 安装
composer require nikic/iter
功能
map()
和 range()
函数的简单使用示例
<?php use iter\func; require 'path/to/vendor/autoload.php'; $nums = iter\range(1, 10); $numsTimesTen = iter\map(func\operator('*', 10), $nums); // => iter(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
您可以在 iter.php 中找到各个函数的文档和用法示例,这里只列出函数签名作为概述
Iterator map(callable $function, iterable $iterable)
Iterator mapWithKeys(callable $function, iterable $iterable)
Iterator mapKeys(callable $function, iterable $iterable)
Iterator flatMap(callable $function, iterable $iterable)
Iterator reindex(callable $function, iterable $iterable)
Iterator filter(callable $predicate, iterable $iterable)
Iterator enumerate(iterable $iterable)
Iterator toPairs(iterable $iterable)
Iterator fromPairs(iterable $iterable)
Iterator reductions(callable $function, iterable $iterable, mixed $startValue = null)
Iterator zip(iterable... $iterables)
Iterator zipKeyValue(iterable $keys, iterable $values)
Iterator chain(iterable... $iterables)
Iterator product(iterable... $iterables)
Iterator slice(iterable $iterable, int $start, int $length = INF)
Iterator take(int $num, iterable $iterable)
Iterator drop(int $num, iterable $iterable)
Iterator takeWhile(callable $predicate, iterable $iterable)
Iterator dropWhile(callable $predicate, iterable $iterable)
Iterator keys(iterable $iterable)
Iterator values(iterable $iterable)
Iterator flatten(iterable $iterable, int $levels = INF)
Iterator flip(iterable $iterable)
Iterator chunk(iterable $iterable, int $size, bool $preserveKeys = false)
Iterator chunkWithKeys(iterable $iterable, int $size)
Iterator tap(callable $function, iterable $iterable)
Iterator toIter(iterable $iterable)
Iterator range(number $start, number $end, number $step = null)
Iterator repeat(mixed $value, int $num = INF)
Iterator split(string $separator, string $data)
mixed reduce(callable $function, iterable $iterable, mixed $startValue = null)
bool any(callable $predicate, iterable $iterable)
bool all(callable $predicate, iterable $iterable)
mixed search(callable $predicate, iterable $iterable)
void apply(callable $function, iterable $iterable)
string join(string $separator, iterable $iterable)
int count(iterable $iterable)
bool isEmpty(iterable $iterable)
mixed recurse(callable $function, $iterable)
array toArray(iterable $iterable)
array toArrayWithKeys(iterable $iterable)
bool isIterable($value)
由于功能是通过生成器实现的,所以默认情况下生成的迭代器不可重置。这个库实现了额外的功能,允许创建可重置的生成器。
您可以在 iter.rewindable.php 中找到相关文档,这里只提供两个主要函数的简单使用示例
<?php use iter\func; require 'path/to/vendor/autoload.php'; /* Create a rewindable map function which can be used multiple times */ $rewindableMap = iter\makeRewindable('iter\\map'); $res = $rewindableMap(func\operator('*', 3), [1, 2, 3]); /* Do a rewindable call to map, just once */ $res = iter\callRewindable('iter\\map', func\operator('*', 3), [1, 2, 3]);
上述函数仅适用于您自己的迭代器;对于 iter
迭代器,直接提供了带有 iter\rewindable
前缀的可重置变体
$res = iter\rewindable\map(func\operator('*', 3), [1, 2, 3]);
// etc