<%@LANGUAGE="VBSCRIPT" CODEPAGE="950"%> Untitled Document
課程103:程控結構。
摘要:
程式控制結構,分為條件式與迴圈兩種,提供程式設計決定判斷的基本能力。這個課程,探討PHP的程式控制結構,藉由實例演練,使學員能了解PHP程控結構的語法與使用方式。

條件式
一、if 命令句
實例一:
程式碼:103_01.php
<?php
echo "if 範例: <br/>";
if($fruit == "apple"){
echo '<hr size=1>只有當 $fruit 等於是 apple 時, 這一行會才秀出來<hr size=1>';
}
echo '<p>這一行永遠會秀出來: $fruit = '.$fruit."</p>";
?>
程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_01.php
  2. http://www.igt.com.tw/~lib13/103_01.php?fruit=apple
  3. http://www.igt.com.tw/~lib13/103_01.php?fruit=orange
實例二:
程式碼:103_02.php
<?php
echo "if-else 範例: <br/>";
if($fruit == "apple"){
echo '<hr size=1>只有當 $fruit 等於是 apple 時, 這一行會才秀出來<hr size=1>';
}else{
echo '<hr size=1>只要 $fruit 不是 apple 時, 就會秀出這行<hr size=1>';
}
echo '<p>我們的水果: $fruit = '.$fruit."</p>";
?>
程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_02.php
  2. http://www.igt.com.tw/~lib13/103_02.php?fruit=apple
  3. http://www.igt.com.tw/~lib13/103_02.php?fruit=orange
實例三:
程式碼:103_03.php
<?php
echo "if-elseif-else 範例: <br/>";
if($fruit == "apple"){
echo '<hr size=1>只有當 $fruit 等於是 apple 時, 這一行會才秀出來<hr size=1>';
}elseif($fruit=="orange"){
echo '<hr size=1>只有當要 $fruit 是 orange 時, 才會秀出這行<hr size=1>';
}else{
echo '<hr size=1>其他ㄉ, 都會秀出這行<hr size=1>';
}
echo '<p>我們的水果: $fruit = '.$fruit."</p>";
?>
程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_03.php
  2. http://www.igt.com.tw/~lib13/103_03.php?fruit=apple
  3. http://www.igt.com.tw/~lib13/103_03.php?fruit=orange
實例四:if
程式碼:103_04.php
範例: if的另一種用法, 內嵌在其他文件中 <br/>

<?php if($fruit=="apple"): ?>
<hr size=1>只有當 $fruit 等於是 apple 時, 這一行會才秀出來<hr size=1>

<?php elseif($fruit=="orange"): ?>
<hr size=1>只有當要 $fruit 是 orange 時, 才會秀出這行<hr size=1>

<?php else: ?>
<hr size=1>其他ㄉ, 都會秀出這行<hr size=1>
<?php endif; ?>

<p>我們的水果: $fruit = <?=$fruit?></p>

程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_04.php
  2. http://www.igt.com.tw/~lib13/103_04.php?fruit=apple
  3. http://www.igt.com.tw/~lib13/103_04.php?fruit=orange
 
二、switch 命令句
實例五:
程式碼:103_05.php
<?php
echo "switch 範例: case 的標籤值為常數<br/>";
switch($fruit){
case "apple":
$myfruit = "蘋果";
break;
case "banana":
$myfruit = "香蕉";
break;
case "orange":
$myfruit = "柳橙";
break;
case "guava":
$myfruit = "拔辣";
break;
case "pear":
$myfruit = "梨子";
break;
default:
$myfruit = "西瓜";
}
echo "<hr size=1>你選的是 $myfruit <hr size=1>";
?>
程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_05.php
  2. http://www.igt.com.tw/~lib13/103_05.php?fruit=apple
  3. http://www.igt.com.tw/~lib13/103_05.php?fruit=banana
  4. http://www.igt.com.tw/~lib13/103_05.php?fruit=orange
  5. http://www.igt.com.tw/~lib13/103_05.php?fruit=guava
  6. http://www.igt.com.tw/~lib13/103_05.php?fruit=pear
  7. http://www.igt.com.tw/~lib13/103_05.php?fruit=kiwi
實例六:
程式碼:103_06.php
<?php
echo "switch 範例: case 的標籤值為變數<br/>";
$a = "apple";
$b = "banana";
$c = "orange";
$d = "guava";
$e = "pear";
switch($fruit){
case $a:
$myfruit = "蘋果";
break;
case $b:
$myfruit = "香蕉";
break;
case $c:
$myfruit = "柳橙";
break;
case $d:
$myfruit = "拔辣";
break;
case $e:
$myfruit = "梨子";
break;
default:
$myfruit = "西瓜";
}
echo "<hr size=1>你選的是 $myfruit <hr size=1>";
?>
程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_06.php
  2. http://www.igt.com.tw/~lib13/103_06.php?fruit=apple
  3. http://www.igt.com.tw/~lib13/103_06.php?fruit=banana
  4. http://www.igt.com.tw/~lib13/103_06.php?fruit=orange
  5. http://www.igt.com.tw/~lib13/103_06.php?fruit=guava
  6. http://www.igt.com.tw/~lib13/103_06.php?fruit=pear
  7. http://www.igt.com.tw/~lib13/103_06.php?fruit=kiwi



迴圈:
一、while 迴圈
基本型態
while(condition){
    statement 1;
    statement 2;
    .
    .
    statement n;

}

當 condition 的值為真時,一直執行 { 和 }所包圍住的程式區段,直到 condition的值變成假的為止。所以,使用while迴圈時,要特別注意,程式區段裡面的命令句,或是condition這個運算式本身,必須要能隨時更新,讓condition能變成假的值。

 
實例七:
程式碼:103_07.php
<?php
echo "while 範例: { 和 }所包圍的程式區段, 改變 while 的 condition<br/>";
echo "<hr size=1>";
$i = 0;
while($i < 10){
echo "$i 的平方: ".$i * $i."<br />";
$i++;
}
?>
程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_07.php
實例八:
程式碼:103_08.php
<?php
echo "while 範例: while condition 本身的運算結果, 改變 while 的 condition<br/>";
echo '使用 pre-increment: 變數 $i 的值先遞增, 再來檢查是否比 10 小<br />';
echo "<hr size=1>";
$i = 0;
while(++$i < 10){
echo "$i 的平方: ".$i * $i."<br />";
}
?>
程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_08.php
實例九:
程式碼:103_09.php
<?php
echo "while 範例: while condition 本身的運算結果, 改變 while 的 condition<br/>";
echo '使用 post-increment: 先檢查是否比 10 小, 再來遞增變數 $i 的值 <br />';
echo "<hr size=1>";
$i = 0;
while($i++ < 10){
echo "$i 的平方: ".$i * $i."<br />";
}
?>
程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_09.php
實例十:
程式碼:103_10.php
範例: while 的另一種用法, 內嵌在其他文件中 <br/><hr size=1>

<?php $i = 0; ?>
<?php while($i++ < 10): ?>
<?=$i?> 的平方: <?=$i * $i?> <br />
<?php endwhile;?>

程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_10.php
 
二、for 迴圈
實例十一:
程式碼:103_11.php
<?php
echo "範例: for 迴圈<br>";

echo "<TABLE border=1>";
echo "<TR><TD>數字</TD><TD>平方</TD></TR>";

for($i = 1; $i < 10; $i++){
echo "<TR><TD>$i</TD><TD>".$i * $i."</TD></TR>";
}
echo "</TABLE>";
?>

程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_11.php
實例十二:
程式碼:103_12.php
範例: for 的另一種用法, 內嵌在其他文件中 <br/><hr size=1>

<TABLE border=1>
<TR><TD>數字</TD><TD>平方</TD></TR>
<?php for($i = 1; $i < 10; $i++): ?>
<TR><TD><?=$i?></TD><TD><?=$i * $i?></TD></TR>
<?php endfor;?>
</TABLE>

程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_12.php

綜合實例:
寫一個程式模擬投擲一顆骰子6000次,並記錄每個點數,出現的次數。
程式碼:103_dice.php
<?php
define ("THROWS", 6000);
$p1 = 0;
$p2 = 0;
$p3 = 0;
$p4 = 0;
$p5 = 0;
$p6 = 0;
for($i = 0; $i < THROWS; $i++){
$p = rand(1, 6);
switch($p){
case 1:
$p1++;
break;
case 2:
$p2++;
break;
case 3:
$p3++;
break;
case 4:
$p4++;
break;
case 5:
$p5++;
break;
case 6:
$p6++;
break;
}
}
echo <<<END
<div align=center>擲骰子<br></div>
<TABLE border=1 align=center>
<TR>
<TD>點數</TD>
<TD>次數</TD>
</TR>
<TR>
<TD>1</TD>
<TD>$p1</TD>
</TR>
<TR>
<TD>2</TD>
<TD>$p2</TD>
</TR>
<TR>
<TD>3</TD>
<TD>$p3</TD>
</TR>
<TR>
<TD>4</TD>
<TD>$p4</TD>
</TR>
<TR>
<TD>5</TD>
<TD>$p5</TD>
</TR>
<TR>
<TD>6</TD>
<TD>$p6</TD>
</TR>
</TABLE>
END;
?>
程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_dice.php
程式碼:103_diceArray.php 另一種作法
<?php
define ("THROWS", 6000);
$p = array(0,0,0,0,0,0,0);
for($i = 0; $i < THROWS; $i++){
$points = rand(1, 6);
$p[$points]++;
}
echo <<<END
<div align=center>"擲骰子: 使用陣列"<br></div>
<TABLE border=1 align=center>
<TR>
<TD>點數</TD>
<TD>次數</TD>
</TR>
<TR>
<TD>1</TD>
<TD>$p[1]</TD>
</TR>
<TR>
<TD>2</TD>
<TD>$p[2]</TD>
</TR>
<TR>
<TD>3</TD>
<TD>$p[3]</TD>
</TR>
<TR>
<TD>4</TD>
<TD>$p[4]</TD>
</TR>
<TR>
<TD>5</TD>
<TD>$p[5]</TD>
</TR>
<TR>
<TD>6</TD>
<TD>$p[6]</TD>
</TR>
</TABLE>
END;
?>
程式執行結果:
  1. http://www.igt.com.tw/~lib13/103_diceArray.php
 

習題:
1. 修改上面的擲骰子程式,將程式改為擲兩顆,擲12000次。並記錄每個點數,出現的次數。(解答:原始碼 執行程式)
2. 修改 1. 的程式,作一個表單,讓使用者輸入骰子顆數,及投擲的次數,然後錄每個點數,出現的次數。(解答:原始碼執行程式)