[TOC]
# 上節回顧
* PHP中變量的數據類型都有哪些?
* 常量的聲明和應用?
* PHP中的運算符號都有哪些?
# 分支結構
> 任何 PHP 腳本都是由一系列語句構成的。一條語句可以是一個賦值語句,一個函數調用,一個循環,甚至一個什么也不做的(空語句)條件語句。語句通常以分號結束。此外,還可以用花括號將一組語句封裝成一個語句組。語句組本身可以當作是一行語句。本章講述了各種語句類型。
在任何一門程序設計語言中,都需要支持滿足程序結構化所需要的三種基本結構:
* 順序結構
* 分支結構(選擇結構)
* 循環結構
順序結構:在程序結構中,最基本的就是順序結構。程序會按照自上而下的順序執行。
***
###### 單一條件分支結構(if)
基本格式:
```
if(條件表達式){
語句組;
//語句組為單條語句時可省略“{ }”。
}
```

當條件表達式的值為真(true)時,PHP將執行語句組,相反條件表達式的值為假(false)時,PHP將不執行語句組,忽略語句組執行下面的語句。
```
<?php
if ($a > $b)
echo "a 大于 b"; //如果變量a的值大于b的值則會輸出:a大于b
$x=10;
$y=20;
if($x<$y){ //判斷是否x小于y。多條語句需要使用{ }括起來。
$t=$x;
$x=$y;
$y=$t;
}
var_dump($x>$y); //輸出:bool(true)
?>
```
###### 雙向條件分支結構(else從句)
格式如下
```
if(條件表達式){
語句組1
}else{
語句組2
}
```

if-else 條件判斷與 if 條件判斷類似,所不同的是,if-else 語句的條件表達式值為真(true)時,會執行 if 的本體語句(語句組1),而條件表達式值為假(false)時,則執行 else 的本體語句(語句組2)。
###### 多向條件分支結構(elseif子句)
格式如下
```
if(條件表達式1){
語句塊1
}elseif(條件表達式2){
語句塊2
... ...
}elseif(條件表達式n){
語句塊n
}else{
語句塊n+1
}
```

```
<?php
date_default_timezone_set("Etc/GMT-8"); //設置時區,中國大陸采用東八區的時間
echo "當前時間".date("Y-m-d H:i:s",time())." "; //通過date()函數獲取當前時間,并輸出
$hour = date("H"); //獲取服務器時間中當前的小時,作為分時問候的條件
if( $hour < 6 ) { //如果當前時間在6點以前,執行下面的語句塊
echo "凌晨好!";
} elseif ( $hour < 9 ) { //如果當前時間在6點之后和9點以前,執行下面的語句塊
echo "早上好!";
} elseif ( $hour < 12 ) { //如果當前時間在9點之后和12點以前,執行下面的語句塊
echo "上午好!";
} elseif ( $hour < 14 ) { //如果當前時間在12點之后和14點以前,執行下面的語句塊
echo "中午好!";
} elseif ( $hour < 17 ) { //如果當前時間在14點之后和17點以前,執行下面的語句塊
echo "下午好!";
} elseif ( $hour < 19 ) { //如果當前時間在17點之后和19點以前,執行下面的語句塊
echo "傍晚好!";
} elseif ( $hour < 22 ) { //如果當前時間在19點之后和22點以前,執行下面的語句塊
echo "晚上好!";
} else { //如果當前時間在22點之后和次日1點以前,執行下面語句塊
echo "夜里好!";
}
```
###### 多向條件分支結構(switch語句)
語句語法:
```
switch(表達式){
case 值1:
語句序列1; break;
case 值2:
語句序列2; break;
…
default:
語句序列 n; break;
}
```

當程序執行碰到switch條件判斷時,它會取出鍵值,然后與語句體中的case所列出的值逐一比較,如果數值不符合,則將數值往下一個case傳遞,如果數值符合,則執行case中的語句,然后再碰到break語句即跳出switch條件判斷,如果所有的值比對都不符合,則會執行default中的語句 。
> switch語句使用注意事項:
* switch語句與if語句不同,它僅能判斷一種關系:是否恒等。
* switch語句中case子句的常量可以是整型常量、字符型常量、表達式或變量。
* 在同一個switch中,case子句的常量不能相同,否則第二個值永遠無法匹配到。
* case 和 default 子句后面的語句序列允許由多個可執行語句組成,且不必用“{ }”括起來,也可以為空語句。
* switch語句中可省略break語句和default子句。但省略后會改變流程。
```
<?php
$week = date("D");
switch( $week ) {
case "Mon": echo "星期一"; break;
case "Tue": echo "星期二"; break;
case "Wed": echo "星期三"; break;
case "Thu": echo "星期四"; break;
case "Fri": echo "星期五"; break;
case "Sat": echo "星期六"; break;
case "Sun": echo "星期日"; break;
}
switch( $i ) { //條件表達式是一個變量$i
case 2: //和值2匹配時,沒有break,將控制轉移到下一個case中的語句
case 3: //和值3匹配時,執行下面的語句塊
echo "\$i和值2或3任一個匹配";
break; //退出switch語句
case 4: //和值為3匹配上時,執行下面的語句塊
echo "\$i和值4匹配時,才會執行";
break; //退出switch語句
default: //匹配任何和其他case都不匹配的情況, 要放在最后一個case之后
echo "\$i沒有匹配的值時,才會執行";
}
```
###### 巢狀條件分支結構
語法:
```
if(表達式1){
if(表達式2){
.. .. ..
}else{
.. .. ..
}
}else{
if(表達式3){ …
}
}
```
巢狀式條件分支結構就是if語句的嵌套,即指if或else后面的語句塊中又包含if語句。if語句可以無限層地嵌套在其他if語句,這給程序的不同部分的條件執行提供了充分的彈性。
巢狀式if..else流程控制使用范例:
```
<?php
$a=88;
echo "數學成績: $A <p>";
if($a>=60){
if($a>=70){
if($a>=90){
echo "不錯喔!!這次數學成績甲等!!";
}else{
echo "還可以...這次數學成績乙等!!";
}
}else{
echo "勉勉強強及格邊緣...這次數學成績丙等!!";
}
}else{
echo "有待下次努力...數學成績不及格!!";
}
?>
```
# 循環結構
###### while語句
while循環語法:
```
while(表達式){
語句或語句序列
... ...
}
```
當while循環語句中表達式(循環控制語句)的結果為真時,程序將反復執行同一段程序:循環體( while中的語句或語句序列),直到滿足一定的條件(表達式的結果為假時)后才停止執行該段程序。

```
實例:
<?php
//求1到100的累加。
$i=1;
$sum=0;
while($i<=100)
{
$sum+=$i;
$i++;
}
echo $sum;
?>
```
> 嘗試一下吧
```
<html>
<head><title>使用while循環嵌套輸出表格</title></head>
<body>
<table align="center" border="1" width=600>
<caption><h1>使用while循環嵌套輸出表格</h1></caption>
<?php
$out = 0; //外層循環需要計數的累加變量
while( $out < 10 ) { //指定外層循環,并且循環次數為10次
$bgcolor = $out%2 == 0 ? "#FFFFFF" : "#DDDDDD";
echo “<tr bgcolor=”.$bgcolor.“>”; //執行一次則輸出一行并指定背景顏色
$in = 0; //內層循環需要計數的累加變量
while( $in < 10 ) { //指定內層循環,并且循環次數為10次
echo "<td>".($out*10+$in)."</td>"; //執行一次,輸出一個單元格
$in++; //內層的計數變量累加
}
echo "</tr>"; //輸出行關閉標記
$out++; //外層的計數變量累加
}
?>
</table>
</body>
</html>
```
###### do...while循環
基本格式:
```
do{
語句或語句序列
... ...
}while(表達式);
```
程序會先執行 do 語句體中的語句(循環體),然后再檢查表達式(循環控制語句)的值,如果符合條件式(值為真),就再進行 do 語句體中的語句,直到條件不符合為止

> 注意:
do-while 后面必須加上分號作為結束
do-while與while的最大區別是先執行循環體然后再判斷循環的控制條件
```
<?php //求1到100的累加。
$i=1; $sum=0;
do{
$sum+=$i;
$i++;
}while($i<=100);
echo $sum;
?>
```
###### for循環
基本格式:
```
for(表達式1;表達式2;表達式3)
{
語句或語句序列;
}
```
for循環語句中表達式1為循環初始條件;表達式2為循環控制條件;表達式3為控制變量遞增;語句或語句序列為循環體。

```
<?php
//使用花括號“{}”將代碼塊括起來,通常代碼塊為一條時可以不加花括號
for( $i = 1; $i <= 10; $i++ ) {
echo "這是第<b> $i </b>次循環執行輸出的結果<br>";
}
$i = 1; //將for語句中第一部分初始化提出來,放到for前面執行,但for語句中的分號要保留
for( ; $i <= 10; $i++ ) {
echo "這是第<b> $i </b>次循環執行輸出的結果<br>";
}
$i = 1; //再將第三部分的增量提出來,放到for語句的執行體最后,但也要將分號保留
for( ; $i <= 10; ) {
echo "這是第<b> $i </b>次循環執行輸出的結果<br>";
$i++;
}
$i = 1;
for( ; ; ) {
if( $i > 10 )
break;
echo "這是第<b> $i </b>次循環執行輸出的結果<br>";
$i++;
}
```
###### 特殊的流程控制語句
* break
我們之前在 switch 條件判斷中已經使用過 break 關鍵字,它會使得程序流程離開 switch 本體中的語句,如果 break 使用在 for、while 或 do-while 循環結構中時,將會使得程序離開該層循環。
* continue
continue 的作用與 break 有點類似,continue 若使用在 for、while 或 do-while循環結構中,當程序執行至 continue 時,之后的語句將直接被略過,而直接執行下一次的循環動作。
3. exit
當前的腳本中只要執行到exit語句,而不管它在哪個結構中都會直接退出當前腳本。exit是一個函數,當前使用過的die( )函數就是exit( )的別名。可以帶參數輸出一條消息,并退出當前腳本。
> Have a try
1. 四種9X9乘法表(for循環)
2. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤控制。(while循環)
- 前言
- Ⅰ.PHP基礎知識
- 1.PHP基本語法(一)
- 2.PHP基本語法(二)
- 3.流程控制結構
- 4.PHP函數
- 5.數組
- 6.字符串
- 7.PHP正則表達式
- 8.PHP的日期和時間
- 9.GD庫圖像處理
- 10.文件處理系統
- 11.文件上傳和下載
- 12.數據庫之MySQL(概述)
- Ⅱ.ThinkPHP5入門實踐
- 一、先看到頁面
- 1.1只展示頁面
- 1.2給視圖傳遞數據
- 1.3使用公共模板
- 1.4使用模板布局
- 二、簡單的數據庫操作
- (1)查
- (2)增
- (3)改
- (4)刪
- (5)鏈式操作
- 三、初級-階段性綜合應用
- (1)注冊
- (2)登錄
- 四、各種基本操作
- 1.操作Session
- 2.操作Cookie
- 3.文件上傳
- 五、富文本編輯器
- 集成wangEditor
- 集成UEditor
- 六、驗證碼
- 圖片驗證碼
- Ⅲ.常用類庫的使用
- 一、PHPExcel表格導入
- 二、PHPExcel表格導出
- 三、阿里大于短信驗證碼
- 四、時間戳操作Time
- 五、郵件發送
- 六、PHP操作Python
- Ⅳ.實例講解
- 一、病房管理系統
- 寫在前面
- 1.引導頁
- 2.公共模板
- 3.登錄
- 4.功能引導頁集合
- 5.修改密碼
- 6.員工信息注冊
- 7.員工信息更新
- 8.員工信息刪除
- 9.病人信息注冊
- 10.病人信息更新
- 11.出院手續辦理
- 12.病人信息刪除
- 13.科室信息查詢
- 14.醫護信息查詢
- 15.病房信息查詢
- 16.病歷信息查詢
- 加群驗證
- 必看推薦閱讀【不斷更新】