PHP学习记录【php流程控制】

作者:神秘网友 发布时间:2020-09-29 03:43:07

PHP学习记录【php流程控制】

PHP学习记录【php流程控制】

PHP 条件语句 if…else
条件语句用于根据不同条件执行不同动作

if…else 语句是最基本的条件语句

PHP 条件语句

当我们编写代码完成功能时,常常需要为不同的判断执行不同的动作

我们可以在代码中使用条件语句来完成此任务

PHP 语言提供了下列条件语句

  1. if 语句 : 在条件成立时执行代码
  2. if…else 语句 : 在条件成立时执行一块代码,条件不成立时执行另一块代码
  3. if…elseif…else 语句 : 在若干条件之一成立时执行一个代码块
  4. switch 语句 : 在若干条件之一成立时执行一个代码块

PHP if 语句

if 语句用于 仅当指定条件成立时执行代码

语法

PHP if 语句语法格式如下

<?php 

if (条件)
{
    //条件成立时要执行的代码
}
?>

范例

<?php 
$week=date("4");
//判断星期小于6,则输出:还没到周末,继续上班.....
if ($week<"6") {
 echo "还没到周末,继续上班.....";
} 
?>

在之前我们也讲过,因此if的结构可以根据人类思维推理出来两种结构:

//if单行判断
if(布尔值判断)
     只写一句话;
后续代码
//if多行判断
if(布尔值判断){
    可以写多句话;
}
后续代码

if 语句用于仅当指定条件成立时执行代码。

如果当前时间小于 20,下面的实例将输出 “Have a good day!”:

<?php
$t=date("H");
if ($t<"20")
{
    echo "Have a good day!";
}
?>

「条件」按照布尔求值。如果「条件」的值为 TRUE,PHP 将执行「条件成立时要执行的代码」,如果值为 FALSE ,将忽略「条件成立时要执行的代码」。

语法

如果 $a 大于 $b,则以下例子将显示 a > b

<?php
if ($a > $b){
  echo "a > b";
}
?>

经常需要按照条件执行不止一条语句,当然并不需要给每条语句都加上一个 if 子句。可以将这些语句放入语句组中。例如,如果 $a 大于 $b,以下代码将显示 a > b 并且将 $a 的值赋给 $b:

<?php
if ($a > $b) {
  echo "a > b";
  $b = $a;
}
?>

王同学是生活极度充满娱乐化和享受生活的人。他抵达北京或者大连的时候做的事,他抵达后做的事情,如下:

半夜到达,先去夜店参加假面舞会
早上抵达,爱在酒店泡个澡
中午到达,会吃上一份神户牛肉
晚上到达,总爱去找朋友去述说一下心中的寂寞
我们来了解一下他的语法规则【知识点要求:默写】

<?php
if(判断语句1){
    执行语句体1
}elseif(判断语句2){
    执行语句体2
}else if(判断语句n){
        执行语句体n
}else{
        最后的else语句可选
}

//后续代码
?>
<?php 
$week=date("4");
//判断星期小于6,则输出:还没到周末,继续上班.....
if ($week<"6") {
    echo "还没到周末,继续上班.....";
} 
?>
<?php
//定义一个随机变量,抵达时间,随机0点至23点
$dida = rand(0,23);
echo "当前时间为 $dida 点\n";
if($dida > 6 && $dida < 10 ){
    echo '酒店去泡澡';
}elseif ($dida > 10 && $dida < 14){
    echo '吃神户牛肉';
}elseif($dida >= 19 && $dida < 22){
    echo '找个朋友聊聊内心的寂寞';
}elseif($dida > 22 && $dida <=23){
    echo '酒店去泡澡';
}elseif($dida >=1 && $dida <3){
    echo '夜店参加舞会';
}else{
    echo '睡觉或者工作中';
}
?>

我们现在来用if…else结构来写一个小东西,加强大家对逻辑的理解。

我们配合之前的知识点来写一个计算器:

<form>
 <input type="text" name="num1">

 <select name="fh">
 <option value="jia"> + </option>
 <option value="jian"> - </option>
 <option value="c"> x </option>
 <option value="chu"> / </option>
 <option value="qy"> % </option>

 </select>

 <input type="text" name="num2">

 <input type="submit" value="运算" />


</form>

<?php

 $num1 = $_GET['num1'];
 $num2 = $_GET['num2'];
 $fh = $_GET['fh'];

 if(!is_numeric($num1) || !is_numeric($num2)){

 echo '请输入数值类型';
 }

 if($fh == 'jia'){
 echo $num1 . '+' . $num2 . '=' . ($num1+$num2);
 }

 if($fh=='jian'){
 echo $num1 . '-' . $num2 . '=' . ($num1-$num2);
 }

 if($fh=='c'){
 echo $num1 . 'x' . $num2 . '=' . ($num1*$num2);
 }
 if($fh=='chu'){
 echo $num1 . '/' . $num2 . '=' . ($num1/$num2);
 }
 if($fh=='qy'){
 echo $num1 . '%' . $num2 . '=' . ($num1%$num2);
 }

?>

运行结果:

PHP学习记录【php流程控制】

我们来了解一下他的语法规则【知识点要求:默写】

<?php
if(判断语句1){
    执行语句体1
}elseif(判断语句2){
    执行语句体2
}else if(判断语句n){
        执行语句体n
}else{
        最后的else语句可选
}

//后续代码
?>

上述结构表示:
如果判断语句1的值为真,则执行语句体 1。执行完成后进入后续代码段。
否则转入后面的判断语句2(elsif),判断语句2若为真,则执行语句体 2。
否则转入后面的判断语句n(elsif),判断语句2若为真,则执行语句体 n。
如果均不匹配则执行else语句。这种循环嵌套可以不含else语句,即只含有if、elseif语句。

注:elseif()也可以写成else if()

我们把上面的代码用流程图的形式表示清楚就如下图了:

PHP学习记录【php流程控制】

if语句多种嵌套

王思总同学我们在最开始的故事中讲到了他有两个秘书:一个生活秘书、一个工作秘书。

王思总同学在出行和项目中也是极度有计划性。他给自己的生活秘书和工作秘书分别指派了出差的行程:

生活上:
先查天气,下雨带雨具和毛巾。不下雨要带防晒霜
雨具、毛巾和防晒霜的情况要提前检查,如果没有要及时买

工作上:
要提前沟通去大连前的工作计划,准备好了要及时检查,检查合格,打印签单。
没有及时准备好的情况下,要列出主要的项目沟通议题。

类似于上面的这种情况判断,我们就需要用到if…elseif…else反复嵌套的结构了。

在if语句中可以嵌套一个或多个if语句,以实现对多个参数的判断,这就是if语句的多种嵌套。其结构形式如下:

<?php
if(判断1){
    if(判断2){
            代码段 1    
    }else{
            代码段2
        }
}else{
    if(判断3){
            代码段3
        }else{
            代码段4
        }
}
?>

我们用流程图来表示如下:

PHP学习记录【php流程控制】
注意:

我们在代码段1,2,3,4中可以再加入判断。根据实际情况还可以再加入嵌套
注意缩进,缩进的作用只是使代码富有层次感,美观易读,对目标代码的生成毫无影响。
我们把王思总同学的生活要求,我们可以用代码用嵌套结构表示出来。我们使用到了三层嵌套结构,代码如下:

<?php
//0表示工作秘书,1表示生活秘书
//用代码模拟随机产生当前的工作是生活秘书的还是工作秘书的
$mishu = rand(0,1);

if($mishu){
       //下雨和不下雨的状态,随机产生
       //下雨状态为1
       //不下雨状态为0
       $xiyu = rand(0,1);
        if($xiyu){
             //是否购买雨伞
             $you = rand(0,1);
             if($you){
                  echo '下雨天,已购买不用买雨伞';
             }else{
                  echo '下雨天,未购买,需要买雨伞';
             }
        }else{
             //是否购买防晒霜
             $you = rand(0,1);
             if($you){
                  echo '没下雨,有防晒霜';
             }else{
                  echo '没下雨,需要准备防晒霜';
             }
        }

}else{
    //是否准备好了会议议程
    $shifou = rand(0,1);

    if($shifou){
        echo '已准备好,可以随时出发';
    }else{
         echo '没有准备好,需要打印,延迟出发';
    }

}

警告:对于编程新手,在使用这种嵌套if…else循环时,请小心使用。因为太多层的循环容易使设计的逻辑出问题,或者少打了大括号等,都会导致程序出现莫名其妙的问题。

希望你能够默写出来。并且,不能有一丁点的语法错误。在以后,我们随时用,要在大脑当中立马产生反映,动手就写。

分支结构switch语句的使用

分支结构switch语句的使用

还记得我们最开始讲了这么一个故事:

王同学家里头特别有钱,所以他的行程方式和正常人的又有些不一样。

他的出行方式呢有6种,如下:

1,司机开车
2,民航
3,自己家的专机
4,火车动车
5,骑马
6,游轮

他的方式有6种,而骰子也真好有6面。所以,我们用if…elseif…的判断方式可以实现,但是效率太低了。

还有其他更好的方式吗?我们可以使用到一种方式就是:switch…case语法。

switch…case的语法结构如下:

<?php

switch(变量){    //字符串,整型

       case 具体值:
               执行代码;
               break;

       case 具体值2:

               执行代码2;
               break;

       case 具体值3:

               执行代码3;
               break;

       default:

}
?>

switch后放需要判断的变量,而case后是放结果。switch后变值为多少,case的值写的与switch变量执相同段的代码。

上面的break是可选的
上面的default也是可选的
不要在case 后面写成分号,后面是冒号:
不要在case后面写判断区间,如($foo > 20 或者 $foo == 30)
switch里面在变量最好是 整型,字符串,因为布尔判断更适合if…else…

我们用流程图来表示的话结果就如下图所示:

PHP学习记录【php流程控制】

上节课中我们用到了rand函数,那我们现在来用rand实现王思总同学的问题选择:

<?php
//定义出行工具
$tool=rand(1,6);

switch($tool){

   case 1:
       echo '司机开车';
       break;
   case 2:
       echo '民航';
       break;
   case 3:
       echo '自己家的专机';
       break;
   case 4:
       echo '火车动车';
       break;
   case 5:
       echo '骑马';
       break;
   case 6:
       echo '游轮';
       break;

}

?>

我们再来写一个简单的星期判断,写法也可以变的怪一些哟:。。。

<?php
//得到今天是星期几的英文简称
$day = date('D');

switch($day){
    //拿学校举例,我们让星期一、二、三是校长日
    case 'Mon':
    case 'Tue':
    case 'Wed':
        echo '校长日';
        break;

        echo '星期三';
        break;
    case 'Thu':
        echo '星期四';
        break;
    case 'Fri':
        echo '星期五';
        break;
    default:
        echo '周末,周末过的比周一到周五还要累<br />';
};
?>

当然你也可以这样,不过这种写太太累了,没有if…else更加简单。我们不用swith…case来做true和false判断

<?php
//用swith...case来完成bool判断
$bool=true;

switch($bool){
   case true:

   case false:


}


/*********分隔线*******************/
if($bool){


}else{


}
?>

世界上最痴心的等待就是我是case你是switch, 我一只默默的等待,可是你却不选我!

php流程控制 之循环语句的使用

王同学需要反复往返于北京和大连,就是典型的循环结构。假设王思总投资这个项目需要往返大连100次,每次往返都王同学都会计数一次。难道我们写一百遍同样的代码?显然对于智商极高的程序员来说不可能这样处理。

我们抽象了人类的这种思维。我们定义一种循环结构

<?php

//定义需要往返的次数,老外喜欢从0开始计数,我们也从0开始计
$count = 0;

//while后面接布尔值判断,为真执行,为假停止
//$count 小于100的时候执行,也就是$count为0至99的时候执行
//如果$count不小于100了,循环停止执行后续的代码

//循环开始处
while($count < 100){

   echo '我是王思总,我是第' . $count .'次出差<br />';
   //每次执行让$count+1,这样的话,就不会产生$count永远小于100的情况了
   $count++;

//循环结束
}

echo '后续代码';
?>

我们可以为while循环补一段专门的代码逻辑图:

PHP学习记录【php流程控制】

while循环

在循环的开章,我们讲到了循环的逻辑和语法,通过以上的训练。你能轻易的掌握循环的知识点。

while是一个布尔型循环,while(布尔判断)的值为true就执行大括号括起来的代码。如果为假就停出去,执行后续代码。

现在,我们增加一点难道,来做隔行变色。隔行变色,是我们在网页中经常使用到的表现。

要求重点掌握。我们来看看效果:

PHP学习记录【php流程控制】

定义初始值,输出表格标签 和 表格中的列标签

<?php
//定义循环的初始值
$i=0;
echo '<table width="800" border="1">';


while($i<100){
        //输出列0-99的列了
    echo '<td>'.$i.'</td>';
        //一定要加哟,不然死循环了
        $i++;
}

echo '</table>';
?>

运行结果:

PHP学习记录【php流程控制】

加上行产生的逻辑

<?php
$i=0;
echo '<table width="800" border="1">';

while($i<100){
    //0 - 9 为一行
        //10 -19 为一行
        //因此,每一行都能够被10求默,如为为10的时候,应该显示行开始的标签
    if($i%10 == 0){
                //为了隔行变色,每20,40,60每行的颜色不同的,因此我们又可以再进行一次取余运算
        if($i%20==0){
            echo '<tr>';
        }else{
            echo '<tr bgcolor="pink">';
        }
    }

    echo '<td>'.$i.'</td>';

    $i++;
        //同理,每一行结束是不是应该有一个</tr>结束标签呢?
    if($i%10==0){
        echo '</tr>';
    }
}
echo '</table>';
?>

以上代码需要多练习,不断的实验才能想象出来。上面的部份,需要默写来锻炼逻辑。

先输出表格标签
通过第一层循环再输出行标签
在第一层循环里面再插入一层循环输出标签

<?php
echo '<table width="800" border="1">';
$i=0;


while($i<10){
    echo '<tr>';

    $j=0;
    while($j<10){

        echo '<td>'.$j.'</td>';
        $j++;

    }
    echo '</tr>';

    $i++;

}
echo '</table>';
?>

运行结果:

PHP学习记录【php流程控制】

PHP流程控制之do…while循环的区别

do…while与while的语法结构基本一样,也是一个布尔型循环,功能也基本一样。

基本语法规定如下

do {
   //代码块
} while (判断);

do…while与while的区别是,它们的值的检查时机不同。

do-while 不论while判断是否成立,先执行一次代码代码块循环语句,保证会执行一次(表达式的真值在每次循环结束后检查)。
然而我们之前的while循环会检查布尔判断区域,成立则执行。不成立则不执行。

我们用代码去验证一下:

<?php
$i = 0;
do {
   echo $i;
} while ($i > 0);
?>

运行结果:

0

上面代码中,$i 肯定不大于0,也执行了。

do…while用的情况比较少。我们有可能用在资源处理如:文件打开等地方。

PHP流程控制之for循环控制语句

王同学反复往返与北京和大连,并且在本上记录往返次数。在PHP中还有另外一种实现方式能够实现同样的计数。

for 循环是 PHP 中的一种计数型循环,它的语法比较数活多变。这是一个必须要掌握的知识点。

for (表达示1; 表达示2; 表达示3){
        需要执行的代码段
}

表达式1 是初始化赋值,可以同时赋值多个代码。
表达示2 在每次循环开始前求值。如果值为 TRUE,则继续循环,执行嵌套的循环语句。如果值为 FALSE,则终止循环。
表达示3 在每次循环之后被求值。
我们来写个简单的例子,看看:

<?php
for ($i = 1; $i <= 10; $i++) {
    echo '分手后第'.$i.'年,我全都忘了你的样子<br />';
}
?>

运行结果:

分手后第1年,我全都忘了你的样子
分手后第2年,我全都忘了你的样子
分手后第3年,我全都忘了你的样子
分手后第4年,我全都忘了你的样子
分手后第5年,我全都忘了你的样子
分手后第6年,我全都忘了你的样子
分手后第7年,我全都忘了你的样子
分手后第8年,我全都忘了你的样子
分手后第9年,我全都忘了你的样子
分手后第10年,我全都忘了你的样子

换种写法,我们现判断多个条件试试:

<?php
    for($i=0,$j=10;$i<$j;$i++,$j--){    
    echo $i.'---------'.$j.'<br />';
    }
?>

运行结果:

0---------10
1---------9
2---------8
3---------7
4---------6

代码中是横着输出的9*9的乘法口诀:

<?php

//99乘法口诀表从1开始,所以声明一个变量$i = 1,让$i小于10,也就是最大值为9
for($i = 1 ; $i < 10 ; $i++ ){
        //1x1=1,2x2等于4,所以第二次循环的最大值为$i的值,因此$j=1, $j在循环自加的过程当中,只能够小于等于$i

    for($j=1;$j<=$i;$j++){
                //  1 x 2 = 2   2 x 2 = 4啦
        echo $j . 'x' . $i . '=' .($i*$j) . '&nbsp;&nbsp;&nbsp;';
    }
    echo '<br />';

}
?>

运行结果:

1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

语句作用
exitexit之前我们讲过了,从当前处停止后续执行
break之前遇到过,跳出循环或者跳出结构体执行后续代码
continue跳出此次循环,下次循环继续

我们来演示一下break和continue:

<?php
for ($i = 1; $i <= 10; $i++) {

    if($i == 4){
            //待会儿换成continue试试
            
            break;
    }

    echo '分手后第'.$i.'年,我全都忘了你的样子<br />';
}
?>

$i 等于4,break效果如下:

分手后第1年,我全都忘了你的样子
分手后第2年,我全都忘了你的样子
分手后第3年,我全都忘了你的样子

注:上图中第4之后不再执行

$i 等于4,continue效果如下:

分手后第1年,我全都忘了你的样子
分手后第2年,我全都忘了你的样子
分手后第3年,我全都忘了你的样子
分手后第5年,我全都忘了你的样子
分手后第6年,我全都忘了你的样子
分手后第7年,我全都忘了你的样子
分手后第8年,我全都忘了你的样子
分手后第9年,我全都忘了你的样子
分手后第10年,我全都忘了你的样子

注:上图中第4第丢失了,接着从第5年继续执行了

PHP流程控制之goto语法

自 PHP 5.3.0 起,还可以使用 goto 来跳出循环。

在本章开始的章节,我们讲解到一个故事,王同学每周往返,但有一个特例:

项目失败后或者集团临时除知除外,他就可以不再这么每周往返了。

基本语法

<?php
goto wan;
echo '天王盖地虎';

wan:
echo '小鸡炖蘑菇';
?>

运行结果:

小鸡炖蘑菇

通过上例,我们发现直接显示输出了:小鸡炖蘑菇。

我们来实现一下霸道王总裁的代码:

<?php
for($i=0; $i<100; $i++) {
    echo '第'. $i .'周往返北京大连<br />';
    if($i == 17){
            goto end; 
     }
}

end:
echo '集团公司要求停止此项';
?>

运行结果:

第0周往返北京大连
第1周往返北京大连
第2周往返北京大连
第3周往返北京大连
第4周往返北京大连
第5周往返北京大连
第6周往返北京大连
第7周往返北京大连
第8周往返北京大连
第9周往返北京大连
第10周往返北京大连
第11周往返北京大连
第12周往返北京大连
第13周往返北京大连
第14周往返北京大连
第15周往返北京大连
第16周往返北京大连
第17周往返北京大连
集团公司要求停止此项

这个知识点为了解级别,大家不想学习,可以不用学习此块。

注:
goto 操作符可以用来跳转到程序中的另一位置。
该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。
PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。

PHP学习记录【php流程控制】相关教程

  1. 达梦数据库学习之读写分离集群

    达梦数据库学习之读写分离集群 学习达梦数据库的读写分离集群,相应的搭建方式不在问中进行详细介绍,其搭建过程与实时主备差不多,只是在配置文件中有些许的区别,如在dmarch.ini中的归档方式不同。主要是是讲解其实现方式和搭建过程中需要注意的地方。 一、

  2. 【vue学习】3.本地应用——显示切换,属性绑定

    【vue学习】3.本地应用——显示切换,属性绑定 【vue学习】3.本地应用——显示切换,属性绑定 作用:根据数据生成列表结构 body !-- 开发环境版本,包含了有帮助的命令行警告 --script src=https://cdn.jsdelivr.net/npm/vue/dist/vue.js/script div id=app u

  3. 用python构写决策树

    用python构写决策树 记录一次决策树分类法的初次使用,使用的数据是一本书上的信息, 如果需要的话可以点个赞然后加我的qq,qq在评论区 使用的jupyter进行编辑的,我尽量把代码图片一块展示出来 import pandas as pdpd1=pd.read_excel(r'D:\zhouty python pro

  4. [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)

    [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值函数 最优控制 Q-Learning 定义 举例: 目标:在每种状态下采取最优的动作。 学习目标:获得最优策略以使累计奖励最大(即score)。 马

  5. 阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第

    阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第12章:开发支持类库:课时50:定时调度 定时器的主要操作是进行定时任务的处理,就好比你们每天早晨起来的铃声一样。在Java中提供有定时任务的支持,但是这种任务的处理只是实现了一种间隔触发

  6. 学习SpringCloud中记录遇到的问题以及重要的知识点

    学习SpringCloud中记录遇到的问题以及重要的知识点 学习SpringCloud中记录遇到的问题以及重要的知识点 pom文件 依赖管理 Eureka Server Eureka Server 的保护机制 pom文件 一开始学习spring cloud时创建项目,通过spring boot 创建多模块的spring cloud组件,

  7. java入门学习笔记(七)——数组、杨辉三角、冒泡排序、选择排序

    java入门学习笔记(七)——数组、杨辉三角、冒泡排序、选择排序、二分查找。复杂类与对象的简介、定义与构造方法、方法继承、覆盖、重载、多态、异类集合、final关键字 一、数组 这样初始化也是正确的: int bb[]=new int[] {1,3,2}; package PackageA;impor

  8. SpringBoot+AOP实现用户操作日志的记录

    SpringBoot+AOP实现用户操作日志的记录 前言: 任何一个项目都会有一个用户操作日志(也叫行为日志)的模块,它主要用来记录某个用户做了某个操作,当出现操作失败时,通过日志就可以快速的查找是哪个用户在哪个模块出现了错误,以便于开发人员快速定位问题所