marvin255/fluent-iterable

PHP 可迭代对象的流畅接口。

v0.12.5 2024-06-08 13:02 UTC

This package is auto-updated.

Last update: 2024-09-08 13:31:11 UTC


README

Latest Stable Version Total Downloads License Build Status

提供 mapfilter 以及其他数组相关函数的对象,适用于任何可迭代实例(arrayIteratorGenerator),并以简单流畅的风格实现。

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

应用中间方法(mergefiltermapskiplimitsortedpeekdistinctflatten

$fluent = $fluent->map(fn (int $item): int => $item + 1)
    ->filter(Filter::compare(Compare::LESS_THEN, 4))
    ->skip(1);

使用其中一个最终化方法(walkreducefindByIndexfindOnefindFirstfindLasttoArraygetIteratorcountmatchAllmatchNonematchAny)获取结果

$result = $fluent->toArray();

将列表转换为单个项的方法(reducefindOnefindByIndexfindFirstfindLast)返回一个 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)