有些面试题中提到PHP读取大文件处理大量数据,感觉用yield迭代器应该是个比较好的办法。
gets逐行读取
利用php的yield特性,也就是迭代器
<?php
function readTxt(){
$handle = fopen("./test.txt", 'rb');
while (feof($handle)===false) yield fgets($handle);
fclose($handle);
}
foreach (readTxt() as $key => $value) {
echo $value;
}
生成器的核心是一个yield关键字,一个生成器函数看起来像一个普通的函数,不同的是:普通函数返回一个值,而一个生成器可以yield生成许多它所需要的值。生成器函数被调用时,返回的是一个可以被遍历的对象。
yield和return有点类似,不过不同的是,return会返回值并且终止代码的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。
如果有更好的办法,欢迎一起交流。