PHP入門之流程控制
前言
上一篇文章對PHP的一些型別和運算子進行了簡單的講解。PHP入門之型別與運算子
這篇簡單講解一下流程控制。結尾有例項,例項內容是用switch分支和for迴圈分別做一個計算器和金字塔。
分支控制
單分支控制
if語句 語法如下:
if(表示式){
語句1;
語句2;
...
}
雙分支控制
if else語句。語法如下
if(表示式){
語句1;
語句2;
...
}else{
語句1;
語句2;
...
}
如果表示式為真,那麼執行{}裡面得。如果為假,直接執行else{}裡面得語句。
舉個例子:
$age=19; if ($age>18){ echo '你已經成年啦'; #因為$age=19 大於18,所以表示式為真,所以輸出後面得。所以輸出“你已經成年啦” }else{ echo '小可愛,你還未成年!'; }
多分支控制
語法:
if(){
語句1;
...
}else if(){
語句1;
...
}else{
語句1;
...
}
這裡得else if(){}可以加很多個。
舉個例子,比如:
$age=3; if ($age>18){ echo '你已經成年啦'; }elseif($age>10 && $age<18){ echo '是少年啦'; }elseif($age>5 && $age<10){ echo '你還是個孩子'; }else{ echo '是嬰兒啦'; }
多分支還有switch語句。語法如下。
switch(表示式){
case常量1:
break;
case常量2:
break;
case常量3:
break;
case常量4:
break;
...
}
舉個例子:
$a=1; switch ($a){ case 1: echo '今天星期1'; break; case 2: echo '今天星期2'; break; case 3: echo '今天星期3'; break; //這裡可以寫很多個 default: echo '輸入有誤'; }
這裡需要注意得是,case語句得break不可以省略,否則無法跳出switch語句,繼續向下執行,直到遇到break。還有一點需要注意得是,default語句放在哪裡沒影響,程式執行順序是,先查詢case語句,case語句沒有符合得,在尋找default語句。
區分一下,什麼時候用if語句,什麼時候用switch語句。
當控制得是一個範圍時,一般用if語句,當控制得是每個點時,用switch語句。
迴圈控制
for迴圈控制。
語法為for(迴圈初值;迴圈得條件;步長){
語句.....
}
舉個例子:
for ($age=0;$age<20;$age++){
echo '
這是一個迴圈';
}
直到迴圈條件語句為假然後跳出迴圈。
while迴圈
迴圈格式為:
while(迴圈控制){
迴圈語句;
}
舉個例子:
$a=0;
while ($a<10){
echo '<br/>這是while迴圈'.$a;
$a++;
}
#迴圈語句中一定要有控制語句,在這裡是$a++,如果不加,0永遠小於10,這個一個死迴圈。
do while迴圈
迴圈格式為:
do{
迴圈語句
}while(迴圈控制);
舉個例子:
$i=0;
do{
echo '<br/>這是一個do while迴圈'.$i;
$i++;
}while($i<10); 這裡也一樣,如果不加$i++控制,也會成為死迴圈。
例項
下面用一個具體的例項,鞏固迴圈流程控制。
switch分支完成簡單計算器。
先完成頁面的設計,程式碼如下。
<html>
<head>
<title>這是一個計算器</title>
</head>
<body >
#由於是本地,所以將表單提交到okok.php。
<form action="okok.php" method="post">
<table>
<tr><td>請輸入</td><td><input type="text" name="sum1"></td></tr><br/>
<tr><td>請在輸入</td><td><input type="text" name="sum2"></td></tr>
<tr><td>點選計算</td><td><input type="submit"></td></tr>
</table>
<select name="oper" >
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
</form>
</body>
</html>
顯示到頁面的內容如下
接下來在okok.php中用switch分支進行核心運算。程式碼如下:
<?php
$sum1=$_POST['sum1'];
$sum2=$_POST['sum2'];
$oper=$_POST['oper'];
$res=0;
switch ($oper){
case "+":
$res=$sum1+$sum2;
break;
case "-":
$res=$sum1-$sum2;
break;
case "*":
$res=$sum1*$sum2;
break;
case "/":
$res=$sum1/$sum2;
break;
default:
echo '運算子不合法';
}
echo '運算結果為:'.$res.'<br/>';
?>
<a href="mycal.php">返回初頁面</a>
現在來運算一下,輸入123+456,檢視返回結果。
for迴圈列印金字塔
<?php
#第一層for迴圈控制金字塔的層數
for ($i=1;$i<=5;$i++){
#控制"*"號
for ($j=1;$j<=$i;$j++){
echo '*';
}
echo '<br/>';
}
?>
顯示效果如圖
我們發現只是列印了一半的金字塔,如何補全呢?如果我們再控制一下前面每一行的空格和每行的*號是不是就可以了?我們來認證一下。將上面的程式碼補全。如下:
<?php
#第一層for迴圈控制金字塔的層數
for ($i=1;$i<=5;$i++){
#控制空格
for ($k=1;$k<=5-$i;$k++){
echo ' ';
}
#控制"*"號
for ($j=1;$j<=2*$i-1;$j++){
echo '*';
}
echo '<br/>';
}
?>
我們再進階一下,如果將這個金字塔內部掏空,又該如何實現呢?我們想一下,是不是我們要只要控制好兩個邊緣的"*"號,其他地方控制填充空格就可以了,有了思路,我們看程式碼,又補充了哪些地方。看程式碼:
<?php
#第一層for迴圈控制金字塔的層數
for ($i=1;$i<=5;$i++){
#控制空格
for ($k=1;$k<=5-$i;$k++){
echo ' ';
}
#控制"*"號
for ($j=1;$j<=2*$i-1;$j++){
if ($j==1 || $j==2*$i-1){
echo '*';
}else{
#填充空格
echo ' ';
}
}
echo '<br/>';
}
?>
效果如下圖
咱們再進階一下,如果將這個空心的三角翻轉一下,打印出菱形,那麼又該如何實現呢?是不是再原來的基礎上再控制一下層數、"*"號、空格就可以完成呢。現在咱們看程式碼。
<?php
#第一層for迴圈控制金字塔的層數
for ($i=1;$i<=5;$i++) {
#控制空格
for ($k = 1; $k <= 5 - $i; $k++) {
echo ' ';
}
#控制"*"號
for ($j = 1; $j <= 2 * $i - 1; $j++) {
if ($j == 1 || $j == 2 * $i - 1) {
echo '*';
} else {
#填充空格
echo ' ';
}
}
echo '<br/>';
}
#翻轉
for ($i=5;$i>=0;$i--){
#控制空格
for ($k=0;$k<=5-$i;$k++){
echo ' ';
}
#控制*和空格
for ($j=1;$j<=2*$i-3;$j++){
if ($j==1 || $j==2*$i-3){
echo '*';
}else{
echo ' ';
}
}
echo '<br/>';
}
?>
效果如下
小結
簡單的說了一下流程控制,希望對大家有幫助。