yield構文からなるジェネレータを利用すると,値にアクセスする瞬間に値を計算するため,配列(メモリ)を大きく確保せずにイテレータが実装できます.
function my_generator() { $fruits = ["apple", "orange", "banana"]; foreach($fruits as $fruit) yield $fruit; } } foreach(yield_example() as $val) { echo $val; }
一方でジェネレータによって生成されたイテレータを用いると値が確定する瞬間が値にアクセスする瞬間となるため,ソートなどを実装しなければならない場合は一度配列に展開する必要があります. イテレータを配列に返還する際は
$my_array = iterator_to_array(my_generator());