Php入門教程之PHP 迴圈語句使用方法

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.