- var_dump: documentation ( source)
- range: documentation ( source)
- iterator_to_array: documentation ( source)
<?php
// thanks to metaultralurker on reddit for inspiration
function call(callable $fn) {
return $fn();
}
function map(callable $fn, \Traversable $data) {
return call(function () use ($fn, $data) {
foreach ($data as $v) {
yield $fn($v);
}
});
}
function filter(callable $fn, \Traversable $data) {
return call(function () use ($fn, $data) {
foreach ($data as $v) {
if ($fn($v)) {
yield $v;
}
}
});
}
$isNotZ = function ($x) {
return $x !== 'Z';
};
$data = filter($isNotZ, map('strtoupper', call(function () {
foreach (range('a', 'z') as $char) {
yield $char;
}
})));
/*
var_dump($data->current());
$data->next();
var_dump($data->current());
$data->next();
*/
var_dump(iterator_to_array($data));