https://github.com/thesebas/php-itertools
https://github.com/thesebas/php-itertools
Last synced: 5 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/thesebas/php-itertools
- Owner: thesebas
- Created: 2017-11-04T18:38:02.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-11-06T08:12:28.000Z (over 8 years ago)
- Last Synced: 2025-08-17T11:17:04.112Z (10 months ago)
- Language: PHP
- Size: 9.77 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# thesebas/itertools
Tools to work with iterators.  [](https://coveralls.io/github/thesebas/php-itertools)
## Installation
`composer require thesebas/itertools`
## Usage
Lest assume we have some generator that yields letters.
```php
expect(iterator_to_array(gen(3)))->toBe(['a', 'b', 'c']);
```
### tail
Skip all but `n` items from Iterator.
```php
$actual = tail(gen(5), 3, false);
expect(iterator_to_array($actual))->toBe(['c', 'd', 'e']);
```
### head
Iterator over `n` first items.
```php
$actual = head(gen(10), 3);
expect(iterator_to_array($actual))->toBe(['a', 'b', 'c']);
```
### skip
Skip `n` items and iterate over rest.
```php
$actual = skip(gen(10), 4);
expect(iterator_to_array($actual))->toBe(['e', 'f', 'g', 'h', 'i', 'j']);
```
### tee
Split Iterator to two independent Iterators (with internal buffering).
```php
list($left, $right) = tee(gen(10));
expect(iterator_to_array(head($left, 3)))->toBe(['a', 'b', 'c']);
expect(iterator_to_array(head($right, 5)))->toBe(['a', 'b', 'c', 'd', 'e']);
expect(iterator_to_array(head($left, 5)))->toBe(['d', 'e', 'f', 'g', 'h']);
expect(iterator_to_array(head($right, 2)))->toBe(['f', 'g']);
expect(iterator_to_array(head($left, 2)))->toBe(['i', 'j']);
expect(iterator_to_array(head($right, 3)))->toBe(['h', 'i', 'j']);
```
### chain
Iterate over first, then second, third...
```php
$actual = chain(gen(5), gen(3));
expect(iterator_to_array($actual))->toBe(['a', 'b', 'c', 'd', 'e', 'a', 'b', 'c']);
```
### filter
Iterate ovel all but yield only filtered items.
```php
$actual = filter(gen(10), function ($item, $key) {
return $key % 2 == 1;
});
expect(iterator_to_array($actual))->toBe(['b', 'd', 'f', 'h', 'j']);
```
### map
Return new Iterator with mapped values
```php
$actual = map(gen(3), function ($item, $key) {
return "item {$key}: {$item}";
});
expect(iterator_to_array($actual))->toBe(['item 0: a', 'item 1: b', 'item 2: c']);
```
### chunk
Return iterator of chunk iterators.
```php
$actual = \iterator_to_array(map(chunk(gen(10), 3), '\\iterator_to_array'));
expect($actual)->toBe([
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i'],
['j']
]);
```