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