摘要:今天分享一個特別好用的東西,里面的生成器才引入的功能,可以避免數組過大導致內存溢出的問題理解生成器關鍵字不是返回值,他的專業術語叫產出值,只是生成一個值,并不會立即生成所有結果集,所以內存始終是一條循環的值應用場景遍歷文件目錄讀取超大文件日
今天分享一個特別好用的東西,php里面的生成器(PHP 5.5.0才引入的功能),可以避免數組過大導致內存溢出的問題
理解:生成器yield關鍵字不是返回值,他的專業術語叫產出值,只是生成一個值,并不會立即生成所有結果集,所以內存始終是一條循環的值
應用場景:
遍歷文件目錄
讀取超大文件(log日志等)
下面就詳細的來說一下用法
1.遍歷文件目錄
function glob2foreach($path, $include_dirs=false) { $path = rtrim($path, "/*"); if (is_readable($path)) { $dh = opendir($path); while (($file = readdir($dh)) !== false) { if (substr($file, 0, 1) == ".") continue; $rfile = "{$path}/{$file}"; if (is_dir($rfile)) { $sub = glob2foreach($rfile, $include_dirs); while ($sub->valid()) { yield $sub->current(); $sub->next(); } if ($include_dirs) yield $rfile; } else { yield $rfile; } } closedir($dh); } }
//調用
$glob = glob2foreach("D:/phpStudy/PHPTutorial/WWW"); //用于查看總共文件數量 $count = 0; while ($glob->valid()) { $filename = $glob->current(); echo $filename; echo "
"; $count++; // 指向下一個,不能少 $glob->next(); } echo $count;
結果如下
2.讀取超大文件
function read_file($path) { if ($handle = fopen($path, "r")) { while (! feof($handle)) { yield trim(fgets($handle)); } fclose($handle); } }
//調用
$glob = read_file("D:/phpStudy/PHPTutorial/WWW/log.txt"); while ($glob->valid()) { // 當前行文本 $line = $glob->current(); // 逐行處理數據 echo $line; echo "
"; // 指向下一個,不能少 $glob->next(); }
結果如下
log.txt這個文件是12M
如果你覺得還不錯,給我點個贊吧!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31389.html
摘要:線程擁有自己獨立的棧和共享的堆,共享堆,不共享棧,線程亦由操作系統調度標準線程是的。以及鳥哥翻譯的這篇詳細文檔我就以他實現的協程多任務調度為基礎做一下例子說明并說一下關于我在阻塞方面所做的一些思考。 進程、線程、協程 關于進程、線程、協程,有非常詳細和豐富的博客或者學習資源,我不在此做贅述,我大致在此介紹一下這幾個東西。 進程擁有自己獨立的堆和棧,既不共享堆,亦不共享棧,進程由操作系...
摘要:的方法在中,提供了方法來拋出異常。總結關于生成器的異常處理,這里來進行一下總結。最近在研究使用實現半協程,而這個過程中,對異常的處理,是非常重要的。但是的運行方式決定了異常處理比較難以理解。 本文是我在研究 PHP 異步編程時的總結。對于相當多的 PHPer 來說,可能都不知道 Generator,或者對 Generaotr 的流程不是很熟悉。因為 Generator 使得程序不再是順...
摘要:今天無事,偶爾看到中的版本選擇處有關于各版本的區別的簡短描述,于是總結一下。相對于之前版本,最大區別也就是命名空間和匿名函數了,這在平時開發和各大框架中都用的比較多了,就不再詳述了。的主要更新是數組簡寫語法格式和了。 今天無事,偶爾看到phpstorm中的版本選擇處有關于各版本的區別的簡短描述,于是總結一下。 showImg(https://segmentfault.com/img/b...
摘要:輕量級集合迭代器泊學視頻鏈接泊閱文檔鏈接是加入的新語言特性。接下來,我們可以像訪問一個普通集合一樣使用現在重新執行我們的文件,就不會再報錯了。簡單來說,就是一個輕量級的,可以記住自身狀態的集合迭代器。 輕量級集合迭代器-Generator泊學視頻鏈接泊閱文檔鏈接Generator是PHP 5.5加入的新語言特性。但是,它似乎并沒有被很多PHP開發者廣泛采用。因此,在我們了解PHP 7對...
閱讀 1760·2023-04-26 00:20
閱讀 1804·2021-11-08 13:21
閱讀 1930·2021-09-10 10:51
閱讀 1557·2021-09-10 10:50
閱讀 3249·2019-08-30 15:54
閱讀 2131·2019-08-30 14:22
閱讀 1429·2019-08-29 16:10
閱讀 3089·2019-08-26 11:50