jeroen/rewindable-generator
Provides a simple adapter to make generators rewindable
Maintainers
Requires
- php: >=7.0
Requires (Dev)
- mediawiki/mediawiki-codesniffer: ~0.6.0
- ockcyp/covers-validator: ~0.6
- phpunit/phpunit: ~6.0
- squizlabs/php_codesniffer: ~2.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
GPL-2.0+ ebac2a47e221e102958dfc41ce46e779315f67ae
This package is auto-updated.
Last update: 2026-06-29 01:26:38 UTC
README
👁 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); iterator_to_array($generator); // boom!
Or this:
$generator = $myGeneratorFunction(); $generator->next(); $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); iterator_to_array($generator); // works as expected $generator->rewind(); // works as expected
Installation
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)
- Fixed HHVM compatibility. Maybe...
Version 1.1.0 (2015-11-08)
- Added
onRewindfunction and second constructor parameter toRewindableGenerator
Version 1.0.0 (2015-11-08)
- Initial release - read blog post
