🙄
【PHP】 yieldの使い方とサンプル
上の記事を見ていたら出てきた yieldの使い方を理解していなかったのでまとめた。
<?php
function fib() {
list($a, $b) = [1, 1];
while (true) {
yield $b;
list($a, $b) = [$b, $a + $b];
}
}
foreach (fib() as $n) {
if ($n > 1000) break;
var_dump($n);
}
#ジェネレータを使ったrange()のサンプル
php.netより
<?php
function xrange($start, $limit, $step = 1) {
if ($start <= $limit) {
if ($step <= 0) {
throw new LogicException('Step must be positive');
}
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
} else {
if ($step >= 0) {
throw new LogicException('Step must be negative');
}
for ($i = $start; $i >= $limit; $i += $step) {
yield $i;
}
}
}
/*
* 次の例で、range() と xrange() が同じ結果を返すことに注目しましょう
*/
echo 'Single digit odd numbers from range(): ';
foreach (range(1, 9, 2) as $number) {
echo "$number ";
}
echo "\n";
echo 'Single digit odd numbers from xrange(): ';
foreach (xrange(1, 9, 2) as $number) {
echo "$number ";
}
?>
関数を作って、そこで配列を作るような形で書く。あとはforeachで取り出す感じ。
Discussion