生成器
场景:
迭代大型数据集或数组时最适合使用生成器。
面对大量的数据时,不需要先把数据读到内存里面。而是即时计算产出后续值,不占用宝贵的内存资源。
与标准的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);
}