marvin255 / fluent-iterable
PHP 可迭代对象的流畅接口。
v0.12.5
2024-06-08 13:02 UTC
Requires
- php: >=8.1
- marvin255/data-getter-helper: ^0.5
- marvin255/optional: ^0.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- infection/infection: ^0.27
- phpunit/phpunit: ^10.0
- vimeo/psalm: ^5.0
README
提供 map
、filter
以及其他数组相关函数的对象,适用于任何可迭代实例(array
、Iterator
、Generator
),并以简单流畅的风格实现。
use Marvin255\FluentIterable\FluentIterable; use Marvin255\FluentIterable\Helper\Reducer; use Marvin255\FluentIterable\Helper\Filter; use Marvin255\FluentIterable\Helper\Compare; $input = [1, 2, 3, 4]; $result = FluentIterable::of($input) ->skip(1) ->filter(Filter::compare(Compare::LESS_THEN, 4)) ->map(fn (int $item): int => $item + 1) ->reduce(Reducer::sum()) ->get();
安装
通过 composer 安装
composer req marvin255/fluent-iterable
使用方法
使用工厂初始化项目(允许任何 iterable
实例)
$fluent = FluentIterable::of($input);
应用中间方法(merge
、filter
、map
、skip
、limit
、sorted
、peek
、distinct
、flatten
)
$fluent = $fluent->map(fn (int $item): int => $item + 1) ->filter(Filter::compare(Compare::LESS_THEN, 4)) ->skip(1);
使用其中一个最终化方法(walk
、reduce
、findByIndex
、findOne
、findFirst
、findLast
、toArray
、getIterator
、count
、matchAll
、matchNone
、matchAny
)获取结果
$result = $fluent->toArray();
将列表转换为单个项的方法(reduce
、findOne
、findByIndex
、findFirst
、findLast
)返回一个 Optional
实例。
调试
可以使用 peek
方法显示中间数据。
use Marvin255\FluentIterable\FluentIterable; use Marvin255\FluentIterable\Helper\Reducer; use Marvin255\FluentIterable\Helper\Filter; use Marvin255\FluentIterable\Helper\Compare; $input = [1, 2, 3, 4]; $result = FluentIterable::of($input) ->filter(Filter::compare(Compare::LESS_THEN, 3)) ->peek( function (mixed $item): void { var_dump($item); } ) ->reduce(Reducer::sum()) ->get();
输出将类似于
int(1)
int(2)