欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。

教程  php基础(五)--流程控制

PHP学习 本站 893 0评论

控制结构


在编程过程中,所有的操作都是按照某种结构有条不紊的进行,程序的控制结构大致分为3种:顺序结构,选择结构和循环结构。


1.顺序结构:是最简单最基本的结构方式,各个流程框依次按顺序进行。如图:

111.jpg


2.选择(分支)结构:选择结构就是对给定的条件进行判断,条件为真时执行一个分支,为假时执行另一个分支。如图:

222.jpg


3.循环结构:可以根据需要多次执行一行或多行代码。循环结构分两种:前测试型循环和后测试型循环。

前测试型循环:先判断后执行。当条件为真时反复执行语句或语句块,条件为假时跳出循环。

后测试型循环:先执行后判断。先执行语句块,在判断条件,直到条件为假时跳出循环。

333.jpg


在PHP中,大多数情况下不是简单的顺序结构,而是这3中结构的组合形式出现。选择和循环结构大致分为以下3种情况来实现。


· 条件控制语句:if、else、elseif和switch;

· 循环控制语句: while、do while、for和 foreach;

· 跳转控制语句:break、continue和return。


下面对这3种语句进行详细讲解


1.条件控制语句


if语句

if语句是最简单的条件判定语句,如果条件成立时,执行其后面的程序,否则跳过。语法:

if(条件)  执行的语句;

    如果执行的语句有多行内容,需要用“{ }”括起来。如:

if(条件) 

    执行的语句1;

    执行的语句2;

……

}


if …else语句

大多数情况下,在满足某个条件时执行一条语句,不满足时执行其他语句。使用该语句。

if(条件){ 

    执行的语句1;

}else{

    执行的语句2;

}

$a = 59; //根据$a的值,判断是否及格。如果>=60则输出及格
if ($a >= 60)
    echo "及格";
else
    echo "不及格";


嵌套的elseif/else if语句

有时候在某个时候不止分为两种情况,就需要用到嵌套的else if语句。else 和if之间有无空格都可以

if(条件1){ 

    执行的语句1;

}elseif(条件2)

    执行的语句2;

}……

else{

    执行的语句n;

}

$a = 59;
if ($a >= 60) { //在大于等于60的情况里在进行分类
    if ($a == 100)echo "满分";
        elseif ($a >= 90) echo "优秀";
    else
        echo "及格";
} else {
echo "不及格";
}


elseif 的语句仅在之前的 if 和所有之前 elseif 的表达式值为 FALSE,并且当前的 elseif 表达式值为 TRUE 时执行。


提示: 必须要注意的是 elseif 与 else if 只有在类似上例中使用花括号的情况下才认为是完全相同。如果用冒号来定义 if/elseif 条件,那就不能用两个单词的 else if,否则 PHP 会产生解析错误。

<?php
/* 不正确的使用方法: */
if($a > $b):
    echo $a." is greater than ".$b;
else if($a == $b): // 将无法编译
    echo "The above line causes a parse error.";
endif;

/* 正确的使用方法: */
if($a > $b):
    echo $a." is greater than ".$b;
elseif($a == $b): // 注意使用了一个单词的 elseif
    echo $a." equals ".$b;
else:
    echo $a." is neither greater than or equal to ".$b;
endif;
?>


switch…case 分支控制语句

switch语句就象是对同一个表达式的一系列if语句。在很多时侯,你想把同一个变量(或者表达式)和许多不同的值去比较 ,并根据不同的比较结果执行不同的程序段。这就是switch语句的用处了。语法如下:

switch(variable){

case  value1:

      statement1;

      break;

case  value2:

      ……

default:

      default  statement  n;

      break;

}

switch 语句根据variable的值依次与case中的value值相比较,如果不相等,继续找下一个case。如果相等就执行对应的语句,直到switch结束或遇到break为止。一般switch语句结尾都有个默认的default,防止没有找到case对应的值不能跳出。

$level = 3;
switch ($level) {
case 3 :
    echo "赋予管理员权限";
    break;
case 2 :
    echo "赋予站务权限";
    break;
case 1 :
    echo "赋予版主权限";
    break;
default :
    echo "赋予普通用户权限";
    break;
}


2.循环控制语句


while语句

while循环,是反复执行某一项操作,当符合while后面的条件时,就循环执行后面的语句块。特点是:先判断表达式后执行语句。语法如下:

while(条件表达式){

     执行的语句块

}

只要表达式的值为true,就循环执行语句块,如果一开始就为false,则一次也不执行。

$num = 1;
$str = "10以内的偶数为:";
while($num <= 10){
    if($num % 2 == 0){
        $str .= $num." ";
    }
$num++;
}
echo $str;

输出:10以内的偶数为:2 4 6 8 10


do……while语句

do……while语句是在循环底部检测循环条件表达式,而不是在循环的顶部检测。特点是:先执行语句后判断表达式。语法格式如下:

do{

     执行的语句块

} while(条件表达式);  //注意此处结尾有个;

由于是先执行语句块再检测表达式,因此该语句块至少被执行一次

$a = 5; //先判断$a是否大于5,如果大于5则执行。
while ($a > 5) {
    echo "This is  while.";
    $a ++;
}
do //先执行do之内的语句,然后进行判断。
{
    echo "This is do…while.";
    $a --;
} while ($a > 5);

输出:This is do…while.


for循环语句

for循环是一个比较复杂的结构,语法如下:

for (expr1; expr2; expr3){ 

    statement    //{}内的语句实际上是嵌套的循环

}

1.第一个表达式(expr1)在循环开始前无条件求值一次。 

2.expr2 在每次循环开始前求值。如果值为 TRUE,则继续循环,执行嵌套的循环语句。如果值为 FALSE,则终止循环。

3.expr3 在每次循环之后被求值(执行)。

每个表达式都可以为空或包括逗号分隔的多个表达式。表达式 expr2 中,所有用逗号分隔的表达式都会计算,但只取最后一个结果。expr2 为空意味着将无限循环下去(和 C 一样,PHP 认为其值为 TRUE)。这可能不像想象中那样没有用,因为经常会希望用 break 语句来结束循环而不是用 for 的表达式真值判断。

//下面例子。它们都显示数字 1 到 10:

/* example 1 */
for ($i = 1; $i <= 10; $i++) {    //标准的for循环
    print $i;
}
echo '<br>';

/* example 2 */
for ($i = 1;; $i++) { //省略了for循环的条件判定
    if ($i > 10) {
        break;
    }
    print $i;
}
echo '<br>';

/* example 3 */
$i = 1;
for (;;) {   //无条件的执行循环体
    if ($i > 10) {
        break;
    }
    print $i;
    $i++;
}

可以看出,第一个例子显然是最好的,但借此你可以发现在FOR 循环中很多场合可以使用空的表达式。不管是那种,一定要保证循环statement能够结束。


foreach循环语句

foreach语句用来遍历一个数组或哈希(hash)表。PHP使用while语句和 list()、each() 函数的功能foreach 循环只适用于数组,并用于遍历数组中的每个键/值对。有两种语法:

语法1:foreach (array_expression as $value)

            statement

语法2:foreach (array_expression as $key => $value)

            Statement

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。 

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。

自PHP 5 起,还可能遍历对象。 


注意:当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。

注意:除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。foreach对数组指针有些副作用。除非对其重置,在 foreach 循环中或循环后都不要依赖数组指针的值。Foreach不支持用“@”来禁止错误信息。

$colors = array("red","green","blue","yellow");
foreach ($colors as $value) {
   echo "$value <br>";
}


自 PHP 5 起,可以很容易地通过在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值,如:

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
print_r($arr);

输出:Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 ) 。


此方法仅在被遍历的数组可以被引用时才可用(例如是个变量)。

foreach (array(1, 2, 3, 4) as &$value) {
    $value = $value * 2;
}


语法2的例子:

$name = array("1"=>"iPhone5","2"=>"相机","3"=>"联想电脑","4"=>"天王表");
$price = array("1"=>"79999元","2"=>"300元","3"=>"560元","4"=>"3600元");
$counts = array("1"=>1,"2"=>1,"3"=>2,"4"=>1);
echo '<table width="580" border="1" cellpadding="1" cellspacing="1" bordercolor="#FFFFFF" bgcolor="#c17e50">
          <tr>
            <td width="145" align="center" bgcolor="#FFFFFF"  class="STYLE1">商品名称</td>
            <td width="145" align="center" bgcolor="#FFFFFF"  class="STYLE1">价 格</td>
            <td width="145" align="center" bgcolor="#FFFFFF"  class="STYLE1">数量</td>
            <td width="145" align="center" bgcolor="#FFFFFF"  class="STYLE1">金额</td>
 </tr>';
foreach($name as $key=>$value){ //以book数组做循环,输出键和值
     echo '<tr>
            <td height="25" align="center" bgcolor="#FFFFFF" class="STYLE2">'.$value.'</td>
            <td align="center" bgcolor="#FFFFFF" class="STYLE2">'.$price[$key].'</td>
            <td align="center" bgcolor="#FFFFFF" class="STYLE2">'.$counts[$key].'</td>
            <td align="center" bgcolor="#FFFFFF" class="STYLE2">'.$counts[$key]*$price[$key].'</td>
</tr>';
}
echo '</table>';

输出如下:

商品名称

价 格

数量

金额

iPhone5

79999元

1

79999

数码相机

3000元

1

3000

联想电脑

5600元

2

11200

天王表

3600元

1

3600


注意:在使用foreach时最好先用is_array()判断一下变量是否是数组类型,如果是,再执行它。


3.跳转控制语句


break语句

break语句可以跳出循环语句,还可以指定跳出几重循环,格式为:

break  n;

444.png


while(true){//使用while循环
    $tmp = rand(1,20);//声明一个随机数变量$tmp
    echo $tmp." ";//输出随机数
    if($tmp == 10){//判断随机数是否等于10
        echo "<p>变量等于10,终止循环";
        break;//如果等于10,使用break语句跳出循环。
    }
}


555

//break n语句

while(true){
    for(;;){
        for($i=0;$i<=10;$i++){
            echo $i." ";
            if($i == 6){
                echo "<p>变量\$i等于6,跳出一重循环。<p>";
                break 1;
            }
        }
        for($j = 0; $j < 20; $j++){
            echo $j." ";
            if($j == 10){
                echo "<p>变量\$j等于10,跳出最外重循环。";
                break 3;
            }
        }
    }
    echo "这句话不会被执行。";
}

输出:0 1 2 3 4 5 6 

变量$i等于6,跳出一重循环。

0 1 2 3 4 5 6 7 8 9 10 

变量$j等于10,跳出最外重循环。


continue语句

continue语句没有break语句那么强大,只能终止本次循环,进入下一次循环。也可以指定跳出几重循环。

555.png


$arr = array("PHP程序开发实战宝典","PHP求职宝典","PHP典型模块","PHP项目开发全程实录","PHP开发实战1200例","PHP网络编程自学手册");//声明一个数组变量$arr
for($i = 0; $i < 6; $i++){//使用for循环
    echo "<br>";
    if($i % 2 == 0){//如果$i的值为偶数,则跳出本次循环
        continue;
    }
    for(;;){//无限循环
        for($j = 0; $j < count($arr); $j++){//再次使用for循环输出数组变量
            if($j == $i){    //如果当前输出的数组下标等于$i
                continue 3;    //跳出最外重循环
            }else{
                echo $arr[$j]."\t | ";//输出表达式
            }
        }
    }
    echo "不会看到!";
}

输出:

PHP程序开发实战宝典 | 

PHP程序开发实战宝典 | PHP求职宝典 | PHP典型模块 | 

PHP程序开发实战宝典 | PHP求职宝典 | PHP典型模块 | PHP项目开发全程实录 | PHP开发实战1200例 |


流程控制的另外一种书写方式


在一个复杂的PHP页面中,可能包含了多个条件控制、循环控制语句函数,仅查找匹配的大括号{}就非常麻烦。为此,PHP提供了另一种书写格式:使用冒号“:”来代替左边的大括号“{”;使用endif;、endwhile;、endfor;、endforeach;、和endswitch来代替右边的大括号。

看下面的列子:

$ss = 2;//声明变量$ss,赋初值为最小的素数

$max = 1000;//声明变量$max,赋值为最大的范围

$arr = array();//声明一个数组$arr

echo $max."以内的素数为:";

while($ss < $max)://判断变量是否在允许的范围内

$boo = false;//声明一个布尔变量$boo,初值为false

foreach($arr as $value)://使用foreach语句遍历$arr数组

if($ss % $value == 0)://如果变量$ss 能够被数组元素整除

$boo = true;//将布尔变量赋值为true

break;//跳出当前循环

endif;

endforeach;

if(!$boo)://判断变量$boo值

echo $ss." ";        //如果$boo为假,则说明当前变量$ss为素数,输出素数

$arr[count($arr)] = $ss;//同时存到数组中

endif;

$ss++;  //变量$ss加1

endwhile;//结束循环

输出:1000以内的素数为:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997


declare

declare 结构用来设定一段代码的执行指令。declare 的语法和其它流程控制结构相似:

declare (directive)

    statement

directive 部分允许设定 declare 代码段的行为。目前只认识两个指令:ticks(更多信息见下面 ticks 指令)以及 encoding(更多信息见下面 encoding 指令)。

详情参考:http://php.net/manual/zh/control-structures.declare.php 


return

如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。return 也会终止 eval() 语句或者脚本文件的执行。

如果在全局范围中调用,则当前脚本文件中止运行。如果当前脚本文件是被 include 的或者 require 的,则控制交回调用文件。此外,如果当前脚本是被 include 的,则 return 的值会被当作 include 调用的返回值。如果在主脚本文件中调用 return,则脚本中止运行。如果当前脚本文件是在 php.ini 中的配置选项 auto_prepend_file 或者 auto_append_file 所指定的,则此脚本文件中止运行。

详情参考:http://php.net/manual/zh/function.return.php 


goto

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

详情参考:http://php.net/manual/zh/control-structures.goto.php 


本章内容参考官网:http://php.net/manual/zh/language.control-structures.php 


转载请注明: ITTXX.CN--分享互联网 » php基础(五)--流程控制

最后更新:2019-02-26 17:41:36

赞 (2) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽