3.PHP流程控制结构

任何 PHP 脚本都是由一系列语句构成的。一条语句可以是一个赋值语句,一个函数调用,一个循环,甚至一个什么也不做的(空语句)条件语句。语句通常以分号结束。此外,还可以用花括号将一组语句封装成一个语句组。语句组本身可以当作是一行语句。本章讲述了各种语句类型。

在任何一门程序设计语言中,都需要支持满足程序结构化所需要的三种基本结构:

  • 顺序结构
  • 分支结构(选择结构)
  • 循环结构

顺序结构:在程序结构中,最基本的就是顺序结构。程序会按照自上而下的顺序执行。

分支结构

单一条件分支结构(if)

基本格式:

      if(条件表达式){
           语句组; 
           //语句组为单条语句时可省略“{ }”。
       }
Paste_Image.png

当条件表达式的值为真(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    
    }
Paste_Image.png

if-else 条件判断与 if 条件判断类似,所不同的是,if-else 语句的条件表达式值为真(true)时,会执行 if 的本体语句(语句组1),而条件表达式值为假(false)时,则执行 else 的本体语句(语句组2)。

多向条件分支结构(elseif子句)

格式如下

    if(条件表达式1){
        语句块1
    }elseif(条件表达式2){    
        语句块2    
    ... ...     
    }elseif(条件表达式n){
         语句块n
     }else{
        语句块n+1
     }
Paste_Image.png
<?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;
     }
Paste_Image.png

当程序执行碰到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中的语句或语句序列),直到满足一定的条件(表达式的结果为假时)后才停止执行该段程序。

Paste_Image.png
实例:
<?php
    //求1到100的累加。
    $i=1;   
    $sum=0;
    while($i<=100)
    {
        $sum+=$i;
        $i++;
    }
    echo $sum;
?>

尝试一下吧

Paste_Image.png
<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 语句体中的语句,直到条件不符合为止

Paste_Image.png

注意:
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为控制变量递增;语句或语句序列为循环体。

Paste_Image.png
<?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 时,之后的语句将直接被略过,而直接执行下一次的循环动作。
  1. 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循环)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • Swift 提供了类似 C 语言的流程控制结构,包括可以多次执行任务的for和while循环,基于特定条件选择执行...
    穷人家的孩纸阅读 690评论 1 1
  • [The Swift Programming Language 中文版]本页包含内容: Swift提供了多种流程控...
    风林山火阅读 555评论 0 0
  • Swift提供了多种控制流声明。包括while循环来多次执行一个任务;if,guard和switch声明来根据确定...
    BoomLee阅读 1,936评论 0 3
  • 本章将会介绍 控制流For-In 循环While 循环If 条件语句Switch 语句控制转移语句 continu...
    寒桥阅读 714评论 0 0
  • 已经立秋了。 初秋的夜晚,蝉鸣还是不消停,“伏天儿、伏天儿”地嘶喊着,白天还好,一到了傍晚,那蝉鸣一浪接着一浪,更...
    幻珥阅读 861评论 0 0