millancore/pipeline-iterator

Pipeline Iterator Filter

1.0.2 2024-11-25 21:09 UTC

This package is auto-updated.

Last update: 2025-03-29 01:14:59 UTC


README

PipelineFilterIterator library provides a flexible and powerful way to filter and manipulate PHP Iterators using a pipeline-based approach. It allows developers to apply multiple filters sequentially in a clean and readable manner.

You can use SPL filters like CallbackFilterIterator, RegexIterator or create your own filter by extending the FilterIterator in simple way.

class EvenFilter extends FilterIterator
{
    public function accept(): bool
    {
        return $this->current() % 2 === 0;
    }
}

Installation

composer require millancore/pipeline-iterator

Usage

use Millancore\PipelineIterator\PipelineFilterIterator;

$arrayData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

/** 
* Use with Iterator
* $iterator = PipelineFilterIterator::create(new ArrayIterator($arrayData))
*/

// Use with Array directly
$iterator = PipelineFilterIterator::createFromArray($arrayData)
    ->filter(EvenFilter::class)
    ->filter(CallbackFilterIterator::class, fn($value) => $value > 3)
    ->filter(RangeFilter::class, 5, 10);

foreach ($iterator as $value) {
    echo $value; // Output: 6, 8, 10
}

Filters with arguments

The first arguments MUST BE Iterator

class RangeFilter extends FilterIterator
{
    public function __construct(
        Iterator             $iterator,
        private readonly int $start,
        private readonly int $end
    ) {
        parent::__construct($iterator);
    }

    public function accept(): bool
    {
        return $this->current() >= $this->start && $this->current() <= $this->end;
    }
}

Examples

Filter CSV File using Generator

License

The MIT License (MIT). Please see License File for more information.