php yield使用
在循环一个大数组的时候yield非常好用能节省内存.
比如有个大文件需要读取并处理,如果全部读出来太耗费内存,就可以这样做
<?php function getRows($file) { $handle = fopen($file, 'rb'); var_dump("------"); if ($handle === false) { throw new Exception(); } while (feof($handle) === false) { yield fgetcsv($handle); } } foreach (getRows('data.csv') as $row) { var_dump($row); }
data.csv内容如下
1,2,3 101,202,303 111,222,333
运行结果如下:
string(6) "------" array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" } array(3) { [0]=> string(3) "101" [1]=> string(3) "202" [2]=> string(3) "303" } array(3) { [0]=> string(3) "111" [1]=> string(3) "222" [2]=> string(3) "333" }
这东西返回的结果是可遍历的,给循环用非常合适.