Provides a simple adapter to make PHP generators rewindable
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Rewindable Generator

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version Download count

Provides a simple adapter to make generators rewindable. Please beware that you can do the same by using PHPs native CachingIterator.

Unfortunately, you cannot do this:

$generator = $myGeneratorFunction();
iterator_to_array($generator); // boom!

Or this:

$generator = $myGeneratorFunction();
$generator->rewind(); // boom!

Both result in an Exception, as proven by the tests in tests/GeneratorTest.php. This library provides a simple class that takes a generator function (the function, not its return value) and adapts it to a rewindable Iterator.

$generator = new RewindableGenerator($myGeneratorFunction);
iterator_to_array($generator); // works as expected
$generator->rewind(); // works as expected


To add this package as a local, per-project dependency to your project, simply add a dependency on jeroen/rewindable-generator to your project's composer.json file. Here is a minimal example of a composer.json file that just defines a dependency on Rewindable Generator 1.x:

    "require": {
        "jeroen/rewindable-generator": "~1.0"

Running the tests

For tests only

composer test

For style checks only

composer cs

For a full CI run

composer ci

Release notes

Version 1.2.0 (2017-05-16)

  • Dropped PHP 5.x support

Version 1.1.1 (2015-11-08)

Version 1.1.0 (2015-11-08)

  • Added onRewind function and second constructor parameter to RewindableGenerator

Version 1.0.0 (2015-11-08)