「基礎編程學習」 「PHP7數組詳解」:第1章 (6)循環結構

# 1.11 循環結構

循環,這個太常用了。我們為什麼使用計算機,而不是手動一個一個處理,就是因為計算機善於處理循環的結構。把最枯燥的部分,扔給機器,它喜歡這樣。

循環的應用場景,很多。比如對於數組的處理,我們在程序當中,總是有很多規格的數據要處理,轉化,轉換,格式化。而數組,也即是我們本書所要講的重點知識,在PHP中非常常見。

PHP中的循環結構,有3中語法結構。

  1. for循環
  2. foreach循環
  3. while循環

1 – for循環

話不多說,直接上代碼。看下面這段:

for語句內位置參數,第一個是循環因子的初始值,第二個是跳出循環的判斷條件,第三個是運行式。

上述代碼中,在條件判斷else中使用continue語句,表示,這一輪算了,就這樣了,不要管了,直接開始下一輪循環吧。默認跳出一層循環。如果循環層數多了,可以指定跳出幾層。

下面我們舉一個直觀的例子,大家在視覺上對for循環有個認識。我們輸出10個進度條,分別從10%-100%,遞加10%。

為了說明效果,HTML和PHP混合寫了,大家知道這個運行機制就可以了,這不是最佳實踐。

注意樣式是使用的bs。

老規矩,在瀏覽器內訪問 www.array.com/chapter1.5.php ,刷新後效果如下圖:

怎麼樣,效果是不是很直觀。一共10個循環,每次遞增10,展示出來就是這樣了。

2 – foreach循環

foreach 語法結構提供了遍曆數組的簡單方式。

foreach 僅能夠應用於數組和對象,如果嘗試應用於其他數據類型的變量,或者未初始化的變量將發出錯誤信息。

你如果曾留意一些框架,或者代碼庫,對此君一定不會陌生。沒錯兒,到處都是它。

先列舉幾個簡單的列子,大家看一看,應該就能明白語法結構了。

$temp是一個數組。再看複雜一些的:

這次循環的時候使用 $k=>$v結構,$k保留索引值,$v保留數值。

PHP內的foreach循環大抵如此。我們使用時,大可不必考慮數組長度,只用考慮數組是一個什麼結構,是關聯數組,還是一維簡單數組,對應處理即可。

3 – while循環

while循環用的也應該算是最低的,為什麼?一不留神,死循環!會一直到PHP的timeout時間30秒。這是不允許出現的。

還是通過代碼認識一下其結構。

上面這段代碼,是對文件的操作句柄$fp,判斷其是否到了文件結尾feof()函數。

如果不是文件末尾,繼續循環。執行結構體內的語句。

當然,上面代碼中使用if判斷語句,如果執行到一行,沒有任何字符,僅僅是換行符,這個說明是空行,那也直接執行break。這也能跳出循環。

有時候為了寫一個命令行運行的文件,要守護進程,永遠不過期,永遠不退出,那可能就需要一個死循環,用雲運行下去。下面的代碼看一下:

大家看,這就是一個while(true)典型的死循環。為什麼這麼用?因為我們不知道到底要處理多少數據,不知道到底有多少循環。因此只能這樣,硬着頭皮走下去,那麼在遇到合適的跳出條件時,使用break跳出循環。

在訂單處理中,預先不能預估數據量的話,不用這樣的辦法,可用的選擇似乎並不多。

為了加深印象,我們再看一個完整的函數:

上述函數解析url內的query string部分,類似 a=1&b=3&c=9這樣,一個一個地截斷操作。知道將字符串字段到最後沒有任何值,那麼strlen($nvpstr) === 0,這時候while循環退出,函數返回。

大家完全可以發揮想像力,使用這簡單的結構,構造出複雜的應用。