php循環控制語句(for,foreach while do while)

foreach

php教程 4(不是 php 3)包括了 foreach 結構,和 perl 以及其他語言很像。這只是一種遍曆數組簡便方法。foreach 僅能用于數組,當試圖將其用于其它數據類型或者一個未初始化的變量時會産生錯誤。有兩種語法,第二種比較次要但卻是第一種的有用的擴展。


foreach (array_expression as $value) statement
foreach (array_expression as $key => $value) statement


第一種格式遍曆給定的 array_expression 數組。每次循環中,當前單元的值被賦給 $value 並且數組內部的指針向前移一步(因此下一次循環中將會得到下一個單元)。

第二種格式做同樣的事,只除了當前單元的鍵值也會在每次循環中被賦給變量 $key。


注: 當 foreach 開始執行時,數組內部的指針會自動指向第一個單元。這意味著不需要在 foreach 循環之前調用 reset()。

注: 此外注意 foreach 所操作的是指定數組的一個拷貝,而不是該數組本身。因此即使有 each() 的構造,原數組指針也沒有變,數組單元的值也不受影響。

注: foreach 不支持用“@”來禁止錯誤信息的能力。


你可能注意到了以下的代碼功能完全相同:


<?php
$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "value: $value<br>n";
}

foreach ($arr as $value) {
echo "value: $value<br>n";
}
?>


以下代碼功能也完全相同:

<?php
reset ($arr);
while (list($key, $value) = each ($arr)) {
echo "key: $key; value: $value<br>n";
}

foreach ($arr as $key => $value) {
echo "key: $key; value: $value<br>n";
}
?>

示範用法的更多例子:

<?php
/* foreach example 1: value only */

$a = array (1, 2, 3, 17);

foreach ($a as $v) {
print "current value of $a: $v.n";
}

/* foreach example 2: value (with key printed for illustration) */

$a = array (1, 2, 3, 17);

$i = 0; /* for illustrative purposes only */

foreach ($a as $v) {
print "$a[$i] => $v.n";
$i++;
}

/* foreach example 3: key and value */

$a = array (
"one" => 1,
"two" => 2,
"three" => 3,
"seventeen" => 17
);

foreach ($a as $k => $v) {
print "$a[$k] => $v.n";
}

/* foreach example 4: multi-dimensional arrays */

$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach ($a as $v1) {
foreach ($v1 as $v2) {
print "$v2n";
}
}

/* foreach example 5: dynamic arrays */

foreach (array(1, 2, 3, 4, 5) as $v) {
print "$vn";
}
?>


for
for 循環是 php 中最複雜的循環結構。它的行爲和 c 語言的相似。 for 循環的語法是:

for (expr1; expr2; expr3) statement


第一個表達式(expr1)在循環開始前無條件求值一次。

expr2 在每次循環開始前求值。如果值爲 true,則繼續循環,執行嵌套的循環語句。如果值爲 false,則終止循環。

expr3 在每次循環之後被求值(執行)。

每個表達式都可以爲空。expr2 爲空意味著將無限循環下去(和 c 一樣,php 認爲其值爲 true)。這可能不想你想象中那樣沒有用,因爲你經常會希望用 break 語句來結束循環而不是用 for 的表達式真值判斷。

考慮以下的例子。它們都顯示數字 1 到 10:

<?php
/* example 1 */

for ($i = 1; $i <= 10; $i++) {
print $i;
}

/* example 2 */

for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
print $i;
}

/* example 3 */

$i = 1;
for (;;) {
if ($i > 10) {
break;
}
print $i;
$i++;
}

/* example 4 */

for ($i = 1; $i <= 10; print $i, $i++);
?>

當然,第一個例子看上去最正常(或者第四個),但你可能會發現在 for 循環中用空的表達式在很多場合下會很方便。

php 也支持用冒號的 for 循環的替代語法。

for (expr1; expr2; expr3): statement; ...; endfor;


其它語言具有 foreach 語句來遍曆數組或散列表,php 也行(見 foreach)。在 php 3 中,可以結合 list() 和 each() 函數用 while 循環來達到同樣效果。例子見這些函數的文檔。


do..while
do..while 和 while 循環非常相似,區別在于表達式的值是在每次循環結束時檢查而不是開始時。和正規的 while 循環主要的區別是 do..while 的循環語句保證會執行一次(表達式的真值在每次循環結束後檢查),然而在正規的 while 循環中就不一定了(表達式真值在循環開始時檢查,如果一開始就爲 false 則整個循環立即終止)。

do..while 循環只有一種語法:


<?php
$i = 0;
do {
print $i;
} while ($i > 0);
?>

以上循環將正好運行一次,因爲經過第一次循環後,當檢查表達式的真值時,其值爲 false($i 不大于 0)而導致循環終止。

資深的 c 語言用戶可能熟悉另一種不同的 do..while 循環用法,把語句放在 do..while(0) 之中,在循環內部用 break 語句來結束執行循環。以下代碼片段示範了此方法:

<?php
do {
if ($i < 5) {
print "i is not big enough";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
print "i is ok";

/* process i */

} while(0);
?>

如果你還不能立刻理解也不用擔心。即使不用此“特性”你也照樣可以寫出強大的代碼來。


while
while 循環是 php 中最簡單的循環類型。它和 c 語言中的 while 表現得一樣。while 語句的基本格式是:

while (expr) statement


while 語句的含意很簡單,它告訴 php 只要while 表達式的值爲 true 就重複執行嵌套中的循環語句。表達式的值在每次開始循環時檢查,所以即使這個值在循環語句中改變了,語句也不會停止執行,直到本次循環結束。有時候如果 while 表達式的值一開始就是 false,則循環語句一次都不會執行。

和 if 語句一樣,可以在 while 循環中用花括號括起一個語句組,或者用替代語法:

while (expr): statement ... endwhile;


下面兩個例子完全一樣,都顯示數字 1 到 10:

<?php
/* example 1 */

$i = 1;
while ($i <= 10) {
print $i++; /* the printed value would be
$i before the increment
(post-increment) */
}

/* example 2 */

$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
?>

更多相關文章
  • 本文章主要講到了關于使用switch語句進行多重條件判斷範例 使用do…while循環範例 continue語句:停止當前循環進入下一次循環等詳細實例.<script language="網頁特效" type="text/javascript">& ...
  • 在php中條件控制語句使用最多的就是if else或switch語句了,下面我來給大家詳細介紹我在學習php中使用if else條件控制語句的筆記有需要的朋友可參考.在php語言中,基本的流程控制結構有:順序結構.分支結構.循環結構.常用的控制語句主要有:if.if…else判斷語句switch 分 ...
  • CASE表達式有點像php case條件了,其實原理都是一樣的,下面本文章整理幾個oracle CASE WHEN控制語句使用例子,希望文章對各位朋友會帶來幫助.簡單CASE表達式,使用表達式確定返回值.語法: 代碼如下 CASE search_expressionWHEN expression1 ...
  • Java條件控制語句switch使用方法
    switch 語句用于基于不同的條件來執行不同的動作了,這個也常被叫做開關語句了,下文我們
  • if ELSE其實是一個獨立的語句了我們可以用來判斷一些簡單的邏輯了,但把if ELSE與for結合使用各位有沒有了解過呢,下面來看看if ELSE的用法.if 語句是用來檢查一個條件:如果條件爲真(true),我們運行一個語句塊(你爲if塊),否則(else),我們執行另一個語句塊(稱爲else塊 ...
  • 本文章來給大家介紹php中基本的循環語句的使用方法,包括for循環,while循環與do while循環的使用方法,本文章很適合于php初學入門者哦.用for語句可以控制多個變量,從而實現多重循環的高級應用.下面看一
  • 本文章介紹了在學習javascript中的循環語句的用法,包while.do-while.for-in.for它們之間的區別,也是常用的循環語句了,有需要的朋友可以了解一下.前兩個唯一的差別就是循環和判斷的順序不同,do-while比while多循環一次,我就不舉例了.for循環相信大家也熟的不能再
  • for語句在c語言中是循環語句,下面我來給c初學者介紹c語言中for語句循環的具體的一些用法與實例介紹.for語句可以在表達式1中實現循環變量的初始化.[例6.7] 代碼如下 main(){ int i, j, k; printf("i j kn"); for (i=0; i&l ...
一周排行
  • 本文章來爲各位介紹一篇關于php中使用uniqid mt_rand 生成隨機不重複字符串的幾種方法,希望文章能夠對各位有用.方法一:<?PHP $str = uniqid(mt_rand(),1); echo ...
  • 下面給大家轉載一篇ubuntu 12.04下apache2+tomcat7用proxy_ajp方式整合步驟文章希望對各位會有所幫助.開始操作前,首先下載需要的安裝包.apache2:http://httpd.apac ...
  • 下面來簡單的介紹在php中get_meta_tags().CURL與user-agent信息對比情況,如果你對于這篇文章有興趣可進入參考學習.get_meta_tags()函數用于抓取網頁中<meta name ...
  • 雖然最新的MySQL安裝文件都帶有MySQL Workbench,可以方便建模並生成數據庫,不過口碑最佳的數據庫建模工具還是當屬Sybase的PowerDesign,可以讓我們方便地一次建模,四海成庫. 下面寫一下如 ...
  • 本文章來爲各位介紹php中Yaf框架集成zendframework2的例子,有興趣的可以和一聚教程小編一起來看看,具體操作如下.php框架 Yaf集成zendframework2, zf2的orm 可以作爲獨立模塊用
  • 今天介紹一下關于json數據解析,我們使用Android中的JSONObject和JSONArray解析json數據,有android開發的朋友可以參考一下. String strJson = "{&quo ...
  • 本文我們來分享MongoDB+PHP開發時的方法及技巧,內容包含有創建索引有時會阻塞新的連接,減少is_master_interval值,理解連接處理方式並配置連接TimeoutMS等.創建索引有時會阻塞新的連接當與
  • 二維碼是現在手機上非常流行的一個快速把pc上的內容轉到手機中的一個方法,像我們的在pc上做一個二維碼了,只要手機一掃我們就可以在手機自動打開這個網頁手機版本了,非常的方法下面我們來看一個例子.1.使用下面代碼首先需要 ...
  • 昨天我在ubuntu中安裝php環境時發現在安裝過程中碰到php顯示找不到makefile了,下面我來給大家介紹具體的解決方法,有需要了解的朋友可進入參考.ubuntu9.04系統如果使用 apache2, apac
  • 在運行Hadoop時報錯jobtracker.info could only be replicated to 0 nodes, instead of 1了,下面一起來看解決辦法.首先查看下空間:hadoop dfs