第十六課:循環控制語句之while
說到 PHP中的循環控制你一定會想到我們前幾天課程裏講到的for語句吧。是的,那個for真是太有趣了,我只用幾行代碼就能讓它打印一個30行的表格,我把那個30簡單的改成100,它就會乖乖的打印一個100行的表格。現在,我們的網上商城裏有許多商品供客戶挑選,當客戶把所選中的商品提交後,我們要用表格一目瞭然的把他選擇的商品呈現在他面前。你準備讓你的程序打印一個多少行的表格呢?不知道吧?傻眼了吧?因爲你根本就不知道客戶選中了多少件商品,所以也不知道讓你的 for循環多少次。
那麼有沒有一種方法,讓程序自己確定要循環的次數呢?有,這個循環控制語句就是while。看下面的一個例子16-1:
echo '<table border=1 width=300>';
echo "<tr><td width=30%>序號</td><td width=70%>商品</td></tr>";
while( @list($key,$sp) = each($_POST['C'] ) ){
$num = $key+1;
echo "<tr><td>$num</td><td>$sp</td></tr>";
}
echo '</table>';
?>
<form method="POST" action="#">
<p>商品:
<input type="checkbox" name="C[]" value="MP3">MP3
<input type="checkbox" name="C[]" value="PDA">PDA
<input type="checkbox" name="C[]" value="VCD">VCD
<input type="checkbox" name="C[]" value="MP4">MP4
<input type="checkbox" name="C[]" value="DVD">DVD
<input type="checkbox" name="C[]" value="手機">手機
<input type="checkbox" name="C[]" value="相機">音樂
<input type="checkbox" name="C[]" value="DV">DV
<input type="checkbox" name="C[]" value="圖書">圖書</p>
<p><input type="submit" value="提交" name="B1"><input type="reset" value="全部重寫" name="B2"></p>
</form>
while語法:
while ( expr ) statement
while 語句的含義是十分簡單的,它告訴PHP在while表達式爲真的情況下反覆執行嵌套的語句,直到表達式的值爲假循環結束。表達式在每一次循環開始的時候檢查,如果表達式在一開始就爲假,那麼循環一次也不會執行。
下面看一個用 while語句實現階乘的例子16-2:
<body>
<form action="" method="post">
請輸入階乘的階數:<input type=text name=steps value=1><input type=submit value=提交>
</form>
<br>
<font size=4>階乘是:</font>
<?php
$sum = 1;
$i = 1;
while ( $i <= @$_POST['steps'] ){
$sum *= $i;
$i++;
}
echo $sum;
echo '<p>';
?>
</body>
</html>
例子16-1可能讓你有些糊塗吧,有幾個地方要給你解釋下:在表單中,所有商品的name屬性值都是"C",在C後面加上中括號([ ])後,表單提交時,PHP會把這些數據都轉化爲一個鍵名爲“C”的$_POST數組,$_POST['C'][0]是第一個數據,$_POST['C'][1]是第二個數據,$_POST['C'][2]是第三個數據。。。list($key,$sp) = each($_POST['C'])結構表示把數組$_POST['C']裏當前的鍵值和數據賦值給$key和$sp,然後數組指針下移,直到數組裏不在有數據。當然,這個例子最簡單的還是使用foreach語句,while與數據庫查詢語句結合使用要多些,但相關知識我們還未學習到,暫且把這個實例用whille實現,讓大家學習一下它的用法。
while 語句主要用在那些循環次數不明確的循環控制。
do...while...語句:
do { statement }
while( expr )
do...while語句是先執行一次循環模塊,然後再進行條件判斷,無論判斷條件是否滿足,循環都會被執行一次。例如16-3:
$i=0;
do{ echo $i; }
while($i>0);
?>