bentools/rewindable-generator

Now your generators become rewindable.

Installs: 308

Dependents: 0

Suggesters: 0

Security: 0

Stars: 4

Watchers: 2

Forks: 1

Open Issues: 0

pkg:composer/bentools/rewindable-generator

1.2 2023-12-23 15:48 UTC

This package is auto-updated.

Last update: 2025-09-23 19:22:13 UTC


README

Latest Stable Version License CI Workflow Coverage Total Downloads

Rewindable generator

$generator = (function () {
    yield 'foo';
    yield 'bar';
})();

var_dump(iterator_to_array($generator)); // ['foo', 'bar']
var_dump(iterator_to_array($generator)); // Boom

PHP Fatal error: Uncaught Exception: Cannot traverse an already closed generator

Yes, I know. That's annoying. But here's a tiny class which will leverage a CachingIterator to make your generator rewindable.

Simple as:

use BenTools\RewindableGenerator;

$generator = (function () {
    yield 'foo';
    yield 'bar';
})();

$iterator = new RewindableGenerator($generator);

var_dump(iterator_to_array($iterator)); // ['foo', 'bar']
var_dump(iterator_to_array($iterator)); // ['foo', 'bar']

Warning: An exception will be thrown if you intend to rewind a generator which has not reached the end (i.e you breakthe loop), since the CachingIterator won't have all items in cache.

Installation

composer require bentools/rewindable-generator

Tests

./vendor/bin/phpunit