萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> Php入門教程之PHP 循環語句使用方法

Php入門教程之PHP 循環語句使用方法

循環語句在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;
4 }

注釋: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))。這些技巧產生的速度差異在小項目裡可能並不明顯,但是在類似框架這樣的大項目中,一次請求動辄便會涉及到幾
百幾千幾萬次數組循環操作,差異就會明顯放大。

copyright © 萬盛學電腦網 all rights reserved