NoteDeep
场景:
迭代大型数据集或数组时最适合使用生成器。
面对大量的数据时,不需要先把数据读到内存里面。而是即时计算产出后续值,不占用宝贵的内存资源。

与标准的php迭代器不同,生成器不要求 实现Iterator接口。

function makeRange($length) { for ($i=0; $i<$length; $i++) { yield $i; } } foreach (makeRange(1000) as $i) { echo $i, PHP_EOL; }

读取数据量非常大的csv文件。
一次只会为csv文件中的一行分配内存,而不会整个4GB的CSV文件都读取到内存中。

function getRows($file) { $handle = fopen($file, "rb"); if ($handle === false) { throw new Exception(); } while (feof($handle) === false) { yield fgetcsv($handle); } fclose($handle); } foreach (getRows('data.csv') as $row) { print_r($row); }

评论列表