while循環(huán)語(yǔ)句
while循環(huán)是PHP中最簡(jiǎn)單的循環(huán)類(lèi)型。其基本格式如下:while (expr) statement
while語(yǔ)句的含義很簡(jiǎn)單,它告訴PHP只要while表達式的值為T(mén)RUE,就重復執行嵌套中的循環(huán)語(yǔ)句。表達式的值在每次開(kāi)始循環(huán)時(shí)檢查,所以即使這個(gè)值在循環(huán)語(yǔ)句中改變了,語(yǔ)句也不會(huì )停止執行,直到本次循環(huán)結束。有時(shí)如果while表達式的值一開(kāi)始就是FALSE,則循環(huán)語(yǔ)句一次都不會(huì )執行。
例如,下面兩個(gè)循環(huán)語(yǔ)句完全一樣,都顯示數字1到10。
<?php$i = 1;while ($i <= 10) { echo $i++;}$i = 1;while ($i <= 10) { print $i; $i++;}?>
do-while循環(huán)語(yǔ)句
do-while與while循環(huán)非常相似,區別在于表達式的值是在每次循環(huán)結束時(shí)檢查而不是在開(kāi)始時(shí),因此do-while循環(huán)語(yǔ)句保證會(huì )執行一次循環(huán),而while循環(huán)就不一定了,如果表達式的值為false則整個(gè)循環(huán)立即終止。如:
<?php$i = 0;do { echo $i;} while ($i > 0);?>
在上面示例中,循環(huán)正好運行一次,因為經(jīng)過(guò)第一次循環(huán)后,當檢查表達式的真值時(shí),其值為false($i不大于0)而導致循環(huán)終止。
for循環(huán)語(yǔ)句
for循環(huán)是PHP中最復雜的循環(huán)結構。它的行為與C語(yǔ)言的相似。其語(yǔ)法格式如下:
for (expr1; expr2; expr3) statement
第一個(gè)表達式(expr1)在循環(huán)開(kāi)始前無(wú)條件求值一次。第二個(gè)表達式expr2在每次循環(huán)開(kāi)始前求值。如果值為true,則繼續循環(huán),執行嵌套的循環(huán)語(yǔ)句。如果值為false,則終止循環(huán)。第三個(gè)表達式expr3在每次循環(huán)之后被求值(執行)。每個(gè)表達式都可以為空或包括逗號分隔的多個(gè)表達式。表達式expr2中,所有用逗號分隔的表達式都會(huì )計算,但只取最后一個(gè)結果。expr2為空,PHP會(huì )認為其值為true,意味著(zhù)將無(wú)限循環(huán)下去。這可能不像想象中那樣沒(méi)有用,因為經(jīng)常會(huì )希望用break語(yǔ)句來(lái)結束循環(huán)而不是用for的表達式真值判斷。例如,下面示例中4個(gè)循環(huán)結構將顯示1到10數字。
<?php/*循環(huán)1 */for ($i = 1; $i <= 10; $i++) { echo $i;}/*循環(huán)2*/for ($i = 1; ; $i++) { if ($i > 10) { break; } echo $i;}/*循環(huán)3 */$i = 1;for (;;) { if ($i > 10) { break; } echo $i; $i++;}/*循環(huán)4 */for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);?>
在上面示例中第一個(gè)循環(huán)結構比較常見(jiàn),但是后面3種循環(huán)形式在特殊情況下比較實(shí)用,建議用戶(hù)靈活掌握它們,學(xué)會(huì )在for循環(huán)中使用空的表達式有時(shí)會(huì )發(fā)現很方便。for循環(huán)經(jīng)常用在遍歷操作,例如,在下面示例中對數組進(jìn)行遍歷,以便改變數組中某些元素的值。
<?php$people = Array( Array('name' => 'Kalle', 'salt' => 856412), Array('name' => 'Pierre', 'salt' => 215863) );for($i = 0; $i < sizeof($people); ++$i){ $people[$i]['salt'] = rand(000000, 999999);}?>
在上面代碼中,for的第二個(gè)表達式需要獲取數組的長(cháng)度,因此每次循環(huán)時(shí)都要計算一遍數組的長(cháng)度,這樣就影響到循環(huán)的執行效率。由于數組的長(cháng)度始終不變,可以使用一個(gè)中間變量來(lái)存儲數組長(cháng)度,然后用這個(gè)變量作為for循環(huán)的第二個(gè)表達式。這樣在循環(huán)時(shí)就可以直接使用該變量的值,不用每次重新計算。如:
<?php$people = Array( Array('name' => 'Kalle', 'salt' => 856412), Array('name' => 'Pierre', 'salt' => 215863) );for($i = 0, $size = sizeof($people); $i < $size; ++$i){ $people[$i]['salt'] = rand(000000, 999999);}?>
foreach循環(huán)語(yǔ)句
PHP 4引入了foreach結構,該結構僅能用于數組,當試圖將其用于其他數據類(lèi)型或者一個(gè)未初始化的變量時(shí)會(huì )產(chǎn)生錯誤,因此可以把它視為一種遍歷數組的簡(jiǎn)便方法。foreach結構有兩種語(yǔ)法:
foreach (array_expression as $value) statementforeach (array_expression as $key => $value) statement
第一種格式遍歷給定的array-expression數組。每次循環(huán)中,當前單元的值被賦予給變量$value,并且數組內部的指針向前移一步,因此下一次循環(huán)中將會(huì )得到下一個(gè)單元。第二種格式與第一種循環(huán)格式相同,只是它不僅獲取每個(gè)單元的值,還可以獲取單元的鍵名,其中當前單元的鍵名也會(huì )在每次循環(huán)中被賦給變量$key。雖然這種格式不常用,但它是第一種格式的有益擴展。自PHP 5起,foreach結構還可以遍歷對象。
當foreach開(kāi)始執行時(shí),數組內部的指針會(huì )自動(dòng)指向第一個(gè)單元。這意味著(zhù)不需要在foreach循環(huán)之前調用reset()。
除非數組是被引用,foreach所操作的是指定數組的一個(gè)備份,而不是該數組本身。foreach對數組指針有些副作用。除非對其重置,在foreach循環(huán)中或循環(huán)后都不要依賴(lài)數組指針的值。但是從PHP 5開(kāi)始,可以很容易地通過(guò)在$value之前加上&運算符來(lái)修改數組的元素。此方法將以引用賦值而不是復制一個(gè)值。如:
<?php$arr = array(1, 2, 3, 4);foreach ($arr as &$value) { $value = $value * 2;}?>
則執行完畢,數組$arr的值變成array(2, 4, 6,8)。
當前文章標題:PHP流程控制(2)
當前URL:http://amzcoolest.com/news/wzzz/3245.html
上一篇:PHP流程控制(1)
下一篇:PHP流程控制(3)