動態生成陣列 PHP生成器動態生成內容的陣列

2021-10-16 09:43:32 字數 1767 閱讀 1789

每日17點準時技術乾貨分享

定義:

1.生成器:「動態生成內容的陣列」,用到值的時候才去生產。

2.搭配使用:關鍵字 yield foreach

過程:

1.作為生成器的方法相當於定義了乙個陣列;

2.生成器中的 yield,每次出現相當於定義了乙個陣列**現的值;

3.foreach 會遍歷生成器中所有的 yield 定義的值(某個被定義的值(表示式),只有在被用到的時候,當前yield同上乙個yield之間的其他表示式才會被執行,當前yield之後的表示式不會被執行);

4.foreach 正常結束的話(不是break),判斷一下生成器中最後乙個yield之後是否有其他表示式未執行完,是的話,執行之;

5.不同於執行緒,不是並行執行,只是在主業務邏輯和生成器之間來回切換執行,只節省了空間,時間沒省下來。

1、取大資料檔案,生成器中逐行讀取;

2、???

例子:gen.php

<?php function gen()        echo '再來乙個資料' . php_eol;     yield 5;     echo '生成器執行結束' . php_eol; }    $gen_func = gen(); echo '生成器開始執行了嗎?' . php_eol; foreach ($gen_func as $key  => $val)   }
執行結果:

php gen.php生成器開始執行了嗎?生成器開始執行產生資料之前:0使用資料前使用資料:0使用資料後產生資料之後:0產生資料之前:1使用資料前使用資料:1使用資料後產生資料之後:1產生資料之前:2使用資料前使用資料:2使用資料後產生資料之後:2產生資料之前:3使用資料前使用資料:3使用資料後產生資料之後:3產生資料之前:4使用資料前使用資料:4使用資料後產生資料之後:4再來乙個資料使用資料前使用資料:5使用資料後生成器執行結束
部分執行過程解讀:1、14行並沒有呼叫生成器gen(),只是做了定義;

2、進入 foreach 迴圈後,開始呼叫gen();

3、$val 需要值的時候,記住當前位置a,執行生成器;

4、執行到 yield 定義的地方,取到值了,記住當前位置b,返回位置a;

5、迴圈3、4兩步;

6、迴圈結束,執行完 yield 最後一次定義的地方的之後的剩下部分;

7、去掉20、21、22行的注釋後執行,"使用資料:4 使用資料後",就不再有其他輸出。

其他(僅驗證了php7.1.14版本)

1、value);//yes value;//no

2、可以使用yield val;

3、php7之後,yield from 可以呼叫生成器、陣列、使用return等。

動態生成陣列

動態生成一維陣列 quint32 count map nodecount qstring name new qstring count 動態生成name一維陣列,儲存點的名字 動態生成二維陣列 quint32 linkatrix linkatrix quint32 malloc sizeof qui...

生成器 PHP的生成器yield 原創

在php 5.5中,php多了乙個新的特性,那就是生成器 generator 生成器提供了一種更簡單的方法來實現簡單的物件迭代。下面的manual的引用 生成器提供了一種更容易的方法來實現簡單的物件迭代,相比較定義類實現 iterator 介面的方式,效能開銷和複雜性大大降低。生成器允許你在 for...

python3生成器 Python3 生成器

python3 生成器 閱讀 125 發布於 2020 05 19 14 29 25 在python中,一邊迴圈一邊計算出元素的機制,稱為生成器 generator。生成器的優點 一次返回乙個結果,延遲計算。這對於大資料量處理,是個非常有用的優勢。占用記憶體量是工程師必須考慮的乙個問題。提高 可讀性...