登入
首頁 所有文章 PHP PHP—產生器的介紹與使用
長也   2018-05-23 10:05:27(1年前)    175點閱   0喜歡  0收藏
PHP—產生器的介紹與使用  

產生器

產生器是一個簡單的迭代器,只在有需要的時候計算並產生迭代的數值;但是產生器是一個用過即丟的工具,無法利用同一個產生器重複迭代,也不能倒退。

產生器的使用

如果我們要產生介於0並小於$step中間的所有數值,傳統上我們會將所有產生的數值存進一個陣列,並回傳

function make($step){
    $num=[];
    for ($i=0;$i<$step;$i++)
        $num[]=$i;
   return $num;
}

試想當今天$step有一百萬個,這樣相當浪費空間,而產生器就是為了節省空間而使用。

建立產生器

function make($step){
    for ($i=0;$i<$step;$i++)
        yield $i;
}

建立產生器使用yield關鍵字,並且每次都只配置一個整數的空間。

使用產生器

foreach (make(50) as $value){
    echo $value." ";
}

這樣就可以輸出介於0~49中的所有數值。

產生器的效益

上面的例子大家可能感受不到,試想要讀入一個4GB的CSV檔案,但是主機提供的記憶體空間卻只有1GB,這樣無法一次把CSV檔裝進記憶體中;如果使用產生器,則可以每次只產生一行CSV所需的空間,而不必一次載入CSV。

這就像是我要運送一萬個貨物給你,而我選擇分批每天運送一個;另一種則是我一次把一萬個貨物運送給你。所以,產生器可以幫助我們節省記憶體的空間,也簡化了複雜度。

 

本文作者:長也

糾結與想不開的資管系學生,之前常碰PHP,現在常碰到的是Python,閒暇之餘就記錄一些筆記。

             

如要發表回覆,請先 登入

  0則回覆