国强极客
有问题请加微信:guoqiang7585
国强极客

6、php流程控制 if while for 循环中断

6、php流程控制 if while for 循环中断

6.1.流程控制概述

6.1.1.三大流程结构:

  • 顺序结构:
    程序运行的自然状态,就是从前往后(从上到下)运行程序。
  • 分支结构:
    程序运行过程中,根据判断条件的不同结果(true或false),执行不同的分支(其他分支不再执行)。
  • 循环结构:
    程序运行过程中,根据判断条件的不同结果(true或false),决定是再次执行还是不再执行。
    ###6.1.2.流程图常用图形符号:

6.2.if语句

有如下几种常见的if语句(不同的分支数量):

6.2.1.形式1:单分支

形式:

if (  条件判断 )
{
//如果条件满足,就执行这里
}

流程图:

6.2.2.形式2:双分支

形式:

if (  条件判断 )
{
//如果条件满足,就执行这里
}
else
{
//如果条件不满足,就执行这里
}

流程图:

6.2.3.形式3:多分枝

形式:

if (  条件判断1 ){
//分支1;
}
elseif(  条件判断2 ){
//分支2;
}
elseif(  条件判断3 ){
//分支3;
}

。。。。。。。前面的elseif分支,可以若干个(0个以上)
流程图:

示例:

如果我有钱,那么我的规划是:
有10万以上,买一个汽车
有2万以上,买一个摩托车
有5000以上,买一个电动单车
有1000以上,买自行车

$money = 999;
if( $money >= 100000)
{
    echo "买汽车";
}
elseif($money >= 20000)
{
    echo "买摩托";
}
elseif($money >= 5000)
{
    echo "买电动单车";
}
elseif($money >= 1000)
{
    echo "自行车";
}
else
{
    echo "搬砖去吧";
}

6.2.4.if语句综合形式

if( 条件1)
{
分支1
}
elseif(条件2)
{
分支2:;
}
elseif( 条件3)
{
分支3;
}
。。。。。。
else
{
    //前面没有一个条件满足的时候,就执行本分支
}

综合案例:

在一个form表单中输入一个分数(0-100之间),程序可以给该分数进行“评语”,评语包括:
优秀,良好,中等,及格,不及格。

<form action="" method="post">
        输入分数:<input type="text" name="score">(0-100之间)
        <br><input type="submit" value="做评语">
    </form>
if(!empty( $_POST['score'] ))//如果不为空
        {
            $sc = $_POST['score'];
            if( $sc >= 90 )
            {
                echo "优秀";
            }
            elseif($sc >= 80)
            {
                echo "良好";
            }
            //。。。更多elseif分支,以及else情况
            //注意:
            //还要考虑分数不在这个范围的情况
            //还要考虑不是分数(比如字母)的情况
        }
        elseif(isset($_POST['score']) && $_POST['score'] == "0")
        {
            echo "不及格";
        }
        else{
            echo "请输入分数";
        }

6.3.分支结构之switch分支语句(重点)

switch( 一个变量数据或表达式结果$v1 )
{
case  值1:           //如果$v1 等于 这个“值1”,就执行本分支
分支语句1;
break;          //表示跳出该分支,也就是跳出switch语句。
case  值2:           //如果$v1 等于 这个“值2”,就执行本分支
分支语句2;
break;
。。。。。。      //可以更多的分支
default:
默认分支;       //前面都不满足的时候,就执行这里,default分支也可以不写
}

1,上述“值1,值2,。。。”可以是各种标量类型,也可以是表达式——因为最终它也是一个值。
2,用于进行测试的数据变量$v1跟后续的各个值,只能进行“相等比较”(==)。
3,从上述第2条角度来说,其实际上不如if灵活。

当某个分支满足条件并执行该分支后,如果该分支中没有break语句,此时,程序的流程会“直接进入”后一个分支继续执行,直到碰到break才会结束switch。

示例:

给出任意年份和月份,输出该月的天数。

//给出任意年份和月份,输出该月的天数。
$year = 2008;
$month = 22;
switch( $month )
{
    case 1:
        echo "{$year}年{$month}月的天数为31天";
        break;
    case 3:
        echo "{$year}年{$month}月的天数为31天";
        break;
    case 5:
        echo "{$year}年{$month}月的天数为31天";
        break;
    case 7:
        echo "{$year}年{$month}月的天数为31天";
        break;
    case 8:
        echo "{$year}年{$month}月的天数为31天";
        break;
    case 10:
        echo "{$year}年{$month}月的天数为31天";
        break;
    case 12:
        echo "{$year}年{$month}月的天数为31天";
        break;
    case 4:
        echo "{$year}年{$month}月的天数为30天";
        break;
    case 6:
        echo "{$year}年{$month}月的天数为30天";
        break;
    case 9:
        echo "{$year}年{$month}月的天数为30天";
        break;
    case 11:
        echo "{$year}年{$month}月的天数为30天";
        break;
    case 2:
        //如果是闰年
        if( $year % 4 == 0 && $year % 100 != 0  || $year % 400 == 0)
        {
            echo "{$year}年{$month}月的天数为29天";
        }
        else
        {
            echo "{$year}年{$month}月的天数为28天";
        }
        
        break;
    default:
        echo "没有该月份";
}
//给出任意年份和月份,输出该月的天数。
$year = 2008;
$month = 22;
switch( $month )
{
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        echo "{$year}年{$month}月的天数为31天";
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        echo "{$year}年{$month}月的天数为30天";
        break;
    case 2:
        //如果是闰年
        if( $year % 4 == 0 && $year % 100 != 0  || $year % 400 == 0)
        {
            echo "{$year}年{$month}月的天数为29天";
        }
        else
        {
            echo "{$year}年{$month}月的天数为28天";
        }
        
        break;
    default:
        echo "没有该月份";
}

6.4.循环结构之while循环语句

循环的含义:就是通过某种语法结构,对某段代码可以“反复执行”。

while(条件判断)
{
。。。。循环体语句;
}

说明:

循环一开始就进行条件判断:
如果成立:则执行循环体,而后会自动回到循环开始位置继续进行条件判断,如此反复;
如果不成立:则退出循环,执行后续语句。

案例:求7到17的和。

//求7到17的和。
$n = 7;
$sum = 0;
while ( $n <= 17)
{
    //$sum = $sum + $n; //好low
    $sum += $n;
    $n++;
}
echo "和为$sum";

案例:求1-100之间能被3整除的数的和!

求1-100之间能被3整除的数的和!

//输出1-100之间能被3整除但不能被5整除的偶数。
for($i = 1; $i <= 100; $i++)
{
    if($i % 3 == 0 && $i % 5 != 0 && $i % 2 == 0)
    {
        echo "$i, ";
    }
}

6.5.循环结构之do while循环语句

do while循环语法:
do 
{

。。。。循环体语句;

}while(条件判断);

说明:
先执行一次循环体,然后进行条件判断:
如果成立:则继续回去执行循环体,而后再次进行条件判断,如此反复;
如果不成立:则退出循环,执行后续语句。

案例:求7到177之间能被7整除的数的平均值。

求7到177之间能被7整除的数的平均值。

//求7到177之间能被7整除的数的平均值。
$n = 7;
$sum = 0;   //总和
$count = 0; //个数
do
{
    //.......做点什么。。。。
    if($n % 7 == 0)
    {
        $sum += $n;     //累加器
        $count++;       //计数器
    }
    $n++;
}while( $n <= 177 );
$avg = $sum / $count;   //平均值
echo $avg;

1,不管是while,还是dowhile,都请先写出一个良好的可运行的循环结构!
2,通常,循环体内的最后位置写循环变量的改变语句;

6.6.循环结构之for循环语句(重点/难点)

for(循环变量初始化; 循环条件判断;循环变量的改变){
。。。。。。。。循环体语句块
}
//这里可以有多条语句
//是可以反复执行的部分

此语句结构是将循环的3个要素都集中在一起写的形式,比较紧凑,容易控制,最常用。

案例1:求1-100之间能被7整除的数的和

求1-100之间能被7整除的数的和。

$sum = 0;   //总和
for( $i = 1; $i <= 100;  $i++)
{
if( $i % 7 == 0)
{
$sum += $i;     //累加
}
}
echo $sum;

案例2:输出1-100之间能被3整除但不能被5整除的偶数

输出1-100之间能被3整除但不能被5整除的偶数。

//输出1-100之间能被3整除但不能被5整除的偶数。
for($i = 1; $i <= 100; $i++)
{
    if($i % 3 == 0 && $i % 5 != 0 && $i % 2 == 0)
    {
        echo "$i, ";
    }
}

案例3:输出1-100之间的数

输出1-100之间的数,并且要求:
能被3整除的使用“三”代替,能被5整除的使用“五”代替,能同时被两者整除的用“三五”代替。

for($i = 1; $i <= 100; ++$i)
{
    if($i % 3 == 0 && $i % 5 == 0)
    {
        echo '三五,';
    }
    elseif($i % 5 == 0)
    {
        echo "五,";
    }
    elseif($i % 3 == 0)
    {
        echo "三,";      
    }
    else
    {
        echo "$i, ";
    }
    
}

6.7.多重循环及案例

概念:
多重循环就是循环里面由出现循环的代码。
其基本执行流程,其实仍然是循环的基本逻辑,只是循环的时候要注意:外层循环执行每一次,里层循环就会完整执行循环的“所有次”(一个完整循环的过程)。

案例1:输出如下形式的数字

输出如下形式的数字到页面上:
1 2 3 4 5 6 7 8;
2 2 3 4 5 6 7 8;
3 2 3 4 5 6 7 8;
4 2 3 4 5 6 7 8;

for($n1 = 1; $n1 <= 4; $n1++)
{
    echo "<br>$n1 ";
    for($n2 = 2; $n2<=7; $n2++)
    {
        echo "$n2 ";
    }
    echo "8;";
}

案例2:输出如下表格

输出如下表格:

<?php 
    echo "<table border='1' width=400 height=100>";
    $n = 0;//计数器 记录循环次数
    for($i = 1; $i <= 4; $i++)
    {
        echo "<tr>";//输出行的开始标签
        for($k = 1; $k <= 6; $k++)
        {
            $n++;
            echo "<td>$n</td>";
        }
        echo "</tr>";//输出行的结束标签
    }

 ?>
</table>
<?php 
    echo $n;
 ?>

案例3:99乘法口诀表

实现如下所示99乘法口诀表。

<table border="1" width="700" height="200">
<?php 
    for($i = 1; $i <= 9; $i++)
    {
        echo "<tr>";//输出行的开始标签
        for($k = 1; $k <= $i; $k++)
        {
            $s = $k*$i;
            //echo "<td>{$k}X$i=$s</td>";
            //上一行还有一种写法如下:
            echo "<td>{$k}X$i=" . $k*$i . "</td>";
        }
        echo "</tr>";//输出行的结束标签
    }
?>
</table>

案例4:公鸡5元一只,母鸡3元一只,小鸡1元3只,100元买了100只鸡,问各多少只?

<?php 
//公鸡5元一只,母鸡3元一只,小鸡1元3只,100元买了100只鸡,问各多少只?
/*
如果公鸡1只,母鸡1只,小鸡1只,则总价为:...... 不对。
如果公鸡1只,母鸡1只,小鸡2只,则总价为:...... 不对。
如果公鸡1只,母鸡1只,小鸡3只,则总价为:...... 不对。
......
如果公鸡1只,母鸡2只,小鸡1只,则总价为:...... 不对。
如果公鸡1只,母鸡2只,小鸡2只,则总价为:...... 不对。
如果公鸡1只,母鸡2只,小鸡3只,则总价为:...... 不对。
......  .........    .........
如果公鸡100只,母鸡100只,小鸡100只,则总价为:...... 不对。
这种编程思想,叫做“穷举”,就是将所有可能的答案都罗列出来,然后挨个去“验证”
 */
$count = 0; //用于记录运行(计算)的次数!
for($gongji = 0; $gongji <= 100; $gongji++)
{
    for($muji = 0; $muji <= 100; $muji++)
    {
        for($xiaoji = 0; $xiaoji <= 100; $xiaoji++)
        {
            if($gongji + $muji + $xiaoji == 100 && $gongji*5 + $muji*3 + $xiaoji/3 == 100)
            {
                echo "<br>公鸡:$gongji, 母鸡:$muji, 小鸡:$xiaoji";
            }
            $count++;
        }
    }
}
echo "<br>运行次数:$count";

echo "<h3>改进1:</h3>";
$count = 0; //用于记录运行(计算)的次数!
for($gongji = 0; $gongji <= 100/5; $gongji++)
{
    for($muji = 0; $muji <= 100/3; $muji++)
    {
        for($xiaoji = 0; $xiaoji <= 100; $xiaoji++)
        {
            if($gongji + $muji + $xiaoji == 100 && $gongji*5 + $muji*3 + $xiaoji/3 == 100)
            {
                echo "<br>公鸡:$gongji, 母鸡:$muji, 小鸡:$xiaoji";
            }
            $count++;
        }
    }
}
echo "<br>运行次数:$count";

echo "<h3>改进2:</h3>";
$count = 0; //用于记录运行(计算)的次数!
for($gongji = 0; $gongji <= 100/5; $gongji++)
{
    for($muji = 0; $muji <= 100/3; $muji++)
    {
        //在公鸡母鸡数量确定了之后,小鸡的数量也可以确定了,所以,不用去循环了!!!
        //for($xiaoji = 0; $xiaoji <= 100; $xiaoji++)
        //{
            $xiaoji = 100 - $gongji - $muji;
            //既然小鸡数据根据条件算出,则无需再进行验证总数量了!
            if($gongji*5 + $muji*3 + $xiaoji/3 == 100)
            {
                echo "<br>公鸡:$gongji, 母鸡:$muji, 小鸡:$xiaoji";
            }
            $count++;
        //}
    }
}
echo "<br>运行次数:$count";

echo "<h3>改进3:</h3>";
$count = 0; //用于记录运行(计算)的次数!
for($gongji = 0; $gongji <= 100/5; $gongji++)
{   
    //考虑公鸡在给定数量情况下,所划掉的钱,剩余的钱(100-$gongji*5)才可能去买母鸡
    for($muji = 0; $muji <= (100-$gongji*5)/3; $muji++)
    {
        //在公鸡母鸡数量确定了之后,小鸡的数量也可以确定了,所以,不用去循环了!!!
        //for($xiaoji = 0; $xiaoji <= 100; $xiaoji++)
        //{
            $xiaoji = 100 - $gongji - $muji;
            //既然小鸡数据根据条件算出,则无需再进行验证总数量了!
            if($gongji*5 + $muji*3 + $xiaoji/3 == 100)
            {
                echo "<br>公鸡:$gongji, 母鸡:$muji, 小鸡:$xiaoji";
            }
            $count++;
        //}
    }
}
echo "<br>运行次数:$count";

echo "<h3>改进4:</h3>";
$count = 0; //用于记录运行(计算)的次数!
for($gongji = 0; $gongji <= 100/5; $gongji++)
{   
    //考虑公鸡在给定数量情况下,所划掉的钱,剩余的钱(100-$gongji*5)才可能去买母鸡
    for($muji = 0; $muji <= (100-$gongji*5)/3; $muji++)
    {
        //在公鸡母鸡数量确定了之后,小鸡的数量也可以确定了,所以,不用去循环了!!!
        //for($xiaoji = 0; $xiaoji <= 100; $xiaoji++)
        //{
            $xiaoji = 100 - $gongji - $muji;
            if($xiaoji % 3 != 0){//小数数量必须是3的倍数,否则不应该继续计算(判断)了
                continue;   //中断本次计算(判断)
            }
            //既然小鸡数据根据条件算出,则无需再进行验证总数量了!
            if($gongji*5 + $muji*3 + $xiaoji/3 == 100)
            {
                echo "<br>公鸡:$gongji, 母鸡:$muji, 小鸡:$xiaoji";
            }
            $count++;
        //}
    }
}
echo "<br>运行次数:$count";
 ?>

6.8.循环的中断

循环是按给定的条件,只要条件满足就会继续执行循环体的一种语法形式。
但,我们也可以在循环过程中(循环体内),人为将循环中断。

有两种中断循环的方式:

continue中断:

含义:中断当前正在进行的循环体(即后续语句不再执行),继续下一次循环要执行的语句。
语法形式:

continue  [$n];     //表示是要中断第几层的循环,继续该层循环的下一次。
//其中$n可以省略,如果省略,表示1,就是中断当前层的循环。

break中断:

含义:停止(跳出)当前正在进行的循环(即完全终止循环),去执行该循环之后的语句。
语法形式:

break  [$n];            //表示是要中断几层循环。
//其中$n可以省略,如果省略,表示1,就是中断当前循环

他们都适用于3种循环。

循环中断的层数的含义

for(....)       //循环1
{
for(...)    //循环2
{
for(...)    //循环3
{
break  ;        //中断循环3
break  1;       //中断循环3
break  2;       //中断循环2
break  3;   //中断循环1
//continue道理一样!
}
break   1;      //中断循环2
break   2;      //中断循环1
}
break   1;      //中断循环1
}
//.......

案例演示:

从1-10(含1和10)进行循环并输出该数字,并要求能被3整除就不输出,能被9整除就终止循环。
最后再输出循环循环变量的值。
情形1:
情形2:

赞赏
对内容有疑问,请加我微信:guoqiang7585
# #
首页      全栈教程      php初级      6、php流程控制 if while for 循环中断

国强极客

文章作者

博客站长,有问题请加微信【guoqiang7585】。

国强极客

6、php流程控制 if while for 循环中断
6.1.流程控制概述 6.1.1.三大流程结构: 顺序结构: 程序运行的自然状态,就是从前往后(从上到下)运行程序。 分支结构: 程序运行过程中,根据判断条件的不同结果(true或false),…
扫描二维码继续阅读
2019-12-02