예제 #1
0
require __DIR__ . "/src/Producer/Producer.php";
require __DIR__ . "/src/Producer/CallableProducer.php";
$randProducer = function ($value) {
    for ($i = 0; $i < $value; $i++) {
        (yield mt_rand(0, ($i + 1) * 100));
    }
};
$numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
$numberformatter = function ($v) use($numbers) {
    $v = (string) $v;
    $str = [];
    for ($i = 0, $l = strlen($v); $i < $l; ++$i) {
        $str[] = $numbers[$v[$i]];
    }
    return implode(" ", $str);
};
$numbersReversed = array_flip($numbers);
$numberReverseFormatter = function ($v) use($numbersReversed) {
    return $numbersReversed[$v];
};
$stuff = \Streams\Stream::from([1, 2, 3, 8, 5, 20, 131, 3425, 134])->flatMap($randProducer)->flatMap($randProducer)->filter(function ($v) {
    return !($v % 3) || !($v % 2);
})->map($numberformatter)->flatMap(function ($formatted) {
    return explode(" ", $formatted);
})->map($numberReverseFormatter)->skip(1000)->limit(200)->compile();
//echo $stuff->compile(), "\n\n";
//echo $stuff->reduce(function ($v, $acc) { return $v + $acc; }, 0), "\n";
foreach ($stuff as $formatted) {
    echo $formatted, "\n";
}
echo memory_get_peak_usage() / 1024, "kb\n";