循環語句在php中很多種,包括有如:for,foreach,while,do while,list,each等等這些都可以用在我們開發中,下面我來介紹常用的PHP循環語句
今天就是PHP基礎知識的最后兩篇文章,目的很簡單就是讓大家對PHP有個初步的認識,這篇主要說下PHP循環,它用于執行相同的代碼塊指定的次數.為我們的開發節省時間.
循環,在您編寫代碼時,您經常需要讓相同的代碼塊運行很多次.您可以在代碼中使用循環語句來完成這個任務.
在 PHP 中,我們可以使用下列循環語句:
while
do…while
for
foreach
while 語句
只要指定的條件成立,while 語句將重復執行代碼塊.
語法:
- while (condition)
- code to be executed;
例子
下面的例子示范了一個循環,只要變量 i 小于或等于 5,代碼就會一直循環執行下去.循環每循環一次,變量就會遞增 1:
實例代碼如下:
- <html>
- <body>
- <?php
- $i=1;
- while($i<=5)
- {
- echo "The number is " . $i . "<br />";
- $i++;
- }
- ?>
- </body>
- </html>
do…while 語句
do…while 語句會至少執行一次代碼 – 然后,只要條件成立,就會重復進行循環.
語法
- do
- {
- code to be executed;
- }
- while (condition);
例子
下面的例子將對 i 的值進行一次累加,然后,只要 i 小于 5 的條件成立,就會繼續累加下去:
實例代碼如下:
- <html>
- <body>
- <?php
- $i=0;
- do
- {
- $i++;
- echo "The number is " . $i . "<br />";
- }
- while ($i<5);
- ?>
- </body>
- </html>
for 語句
如果您已經確定了代碼塊的重復執行次數,則可以使用 for 語句.
- for (initialization; condition; increment)
- {
- code to be executed;
注釋:for 語句有三個參數.第一個參數初始化變量,第二個參數保存條件,第三個參數包含執行循環所需的增量.如果 initialization 或 increment 參數中包括了多個變量,需要用逗號進行分隔.而條件必須計算為 true 或者 false.
下面的例子會把文本 “Hello World!” 顯示 5 次:
實例代碼如下:
- <html>
- <body>
- <?php
- for ($i=1; $i<=5; $i++)
- {
- echo "Hello World!<br />";
- }
- ?>
- </body>
- </html>
foreach 語句
foreach 語句用于循環遍歷數組.每進行一次循環,當前數組元素的值就會被賦值給 value 變量(數組指針會逐一地移動) – 以此類推.
語法
- foreach (array as value)
- {
- code to be executed;
- }
下面的例子示范了一個循環,這個循環可以輸出給定數組的值:
實例代碼如下:
- <html>
- <body>
- <?php
- $arr=array("one", "two", "three");
- foreach ($arr as $value)
- {
- echo "Value: " . $value . "<br />";
- }
- ?>
- </body>
- </html>
一個遍歷目錄函數實例代碼如下:
- <?php
- /*
- * 遞歸獲取指定路徑下的所有文件或匹配指定正則的文件(不包括“.”和“..”),結果以數組形式返回
- * @param string $dir
- * @param string [$pattern]
- * @return array
- */
- function file_list($dir,$pattern="")
- {
- $arr=array();
- $dir_handle=opendir($dir);
- if($dir_handle)
- {
- // 這里必須嚴格比較,因為返回的文件名可能是“0”
- while(($file=readdir($dir_handle))!==false)
- {
- if($file==='.' || $file==='..')
- {
- continue;
- }
- $tmp=realpath($dir.'/'.$file);
- if(is_dir($tmp))
- {
- $retArr=file_list($tmp,$pattern);
- if(!emptyempty($retArr))
- {
- $arr[]=$retArr;
- }
- }
- else
- {
- if($pattern==="" || preg_match($pattern,$tmp))
- {
- $arr[]=$tmp;
- }
- }
- }
- closedir($dir_handle);
- }
- return $arr;
- }
- // 列出網站根目錄下所有以".php"擴展名(不區分大小寫)結尾的文件
- echo '<pre>';
- print_r(file_list($_SERVER['DOCUMENT_ROOT'],"//.php$/i"));
- echo '</pre>';
- ?>
這個就可以方便的無限目錄遍歷了..
foreach與while性能比較
在循環里進行的是數組“讀”操作,則foreach比while快:
在循環里進行的是數組“寫”操作,則while比foreach快
- /**
- * while跟foreach函數性能比較
- *
- */
- // foreach 函數
- foreach ($array as $key => $value) {
- echo $array[$key] = $value . '...';
- }
- // while 函數
- while (list($key) = each($array)) {
- $array[$key] = $array[$key] . '...';
- }
總結:通常認為,foreach涉及到值復制,一定會比while慢,但實際上,如果僅僅是在循環里進行數組的讀操作,那么foreach是很快的,這是因為PHP采用的復制機制是“引用計數,寫時復制”,也就是說,即便在PHP里復制一個變量,最初的形式從根本上說其實仍然是引用的形式,只有當變量的內容發生變化時,才會出現真正的復制,之所以這么做是出于節省內存消耗得目的,同時也提升了復制的效率.這樣看來,foreach的高效讀操作就不難理解了.另外,既然foreach不適合處理數組寫操作,那么我們可以得出一個結論,多數情況下,類似foreach ($array as $key => $value)形式的做數組寫操作得代碼都應該被替換成while (list($key) =each($array)).這些技巧產生的速度差異在小項目里可能并不明顯,但是在類似框架這樣的大項目中,一次請求動輒便會涉及到幾百幾千幾萬次數組循環操作,差異就會明顯放大.
新聞熱點
疑難解答