自学php-循环控制语句

循环控制语句:

while循环语句:格式为:while(expr){ statement;},当表达式expr的值为真时,执行statement语句,结束后,再返回expr表达式继续进行判断,直到表达式的值为假,跳出循环,执行下面的语句。   例如:

<?php
$num = 1;
$str = "10以内的偶数为:";
while($num <= 10){ //判断变量$num是否小于10
if($num % 2 == 0){  //小于10,判断是否为偶数
$str.=$num.""; //如果当前的变量值为偶数,则添加到字符变量$str的后面
}
$num++;  //变量的值累加1
}
echo $str;  //循环结束后输出字符串$str
?>

运行结果为:10以内的偶数为:246810

do...while:while语句的另一种表现形式,区别在于do....while要比while语句多循环一次,当while表达式的值为假时,while循环直接跳出当前循环,而do.....while语句则是先执行一遍程序块,然后再对表达式进行判断;区别展示;例如:

<?php
$num = 1;
while($num != 1){
echo "不会看到";
}
do{          //使用do.....while循环再执行一次
echo "会看到";
    }while($num != 1);
?>

输出结果为:会看到

for循环语句:php中最复杂的循环结构,语法格式为:for(expr1;expr2;expr3){statement;}执行的顺序是:expr在第一次循环的时候无条件先取一次值,接着执行表达式expr2,如果得出的值为真,则执行statement,否则跳出循环,继续向下执行;实例如下:

<?php
$num = 1; 
for($i = 1;$i <= 100;$i++){  //$i代表的是循环次数
$num *= $i;  //当$i小于100时计算阶乘
}
echo "100! =".$num;
?>

输出结果为:100! =9.3326215443944E+157

foreach循环:只能用于数组,有增加了对对象的支持;格式为:foreach(array_expression as $value){statement;}或者foreach(array_expression as $key => $value){statement};说明:foreach语句将遍历数组array_expression,每次循环时,将当前数组中的值赋给$value(或者是$key和$value),同时,数组的指针向后移动直到遍历结束,使用foreach语句时,数组指针将自动被重置,不需要手动设置指针的位置。;例如:

<?php
$arr = array("we","are","the","best","team!");  //声明数组变量
if(is_array($arr) == TRUE){      //判断变量$arr是否为数组
foreach($arr as $key => $value){  //如果是,使用foreach遍历
echo $key."=".$value."<br>";//输出数组的内容
}
}else{
echo "变量$arr不是数组,不能用foreach语句";//如果不是数组输出提示信息
}
?>

运行的结果为:0=we    1=are    2=the    3=best     4=team!

注意:使用foreach语句用于其他数据类型或者未初始化的变量是会产生错误,最好使用is_array()函数先判断变量是否为数组,如果是,在进行其他操作。

流程控制的另一种书写格式:为了避免多个条件语句和循环语句的{}带来的困扰,php提供了另一种书写格式;包括:if、while、for、foreach、和switch,都可以使用;格式为:使用“:”代替左边的“{”,使用endif; 、 endwhile; 、endfor; 、endreach; 、和endswitch; ,来代替结尾的“}”。例如:

<?php
$ss = 2;      //声明变量$ss,赋初值为最小素数
$max = 1000;  //声明变量,赋初值为最大的范围
$arr = array();  //声明一个数组$arr
echo $max."以内的素数为:";
while($ss < $max):     //判断变量是否在允许的范围内
   $boo = false;     //声明一个布尔变量$boo,初值为false
   foreach($arr as $value):      //foreach遍历数组
        if($ss % $value == 0):     //如果$ss能被数组元素整除
       $boo = true;   //将布尔变量赋值为true
  break;        //跳出当前循环
  endif;
  endforeach;
  if(!$boo):      //判断变量$boo的值
     echo $ss."&nbsp;";           //如果$boo为假,则说明当前变量$ss为素数,输出
 $arr[count($arr)] = $ss;       //同时存到数组中
 endif;
 $ss++;        //$ss加1
endwhile;


?>

运行结果为:2 3 5 7........

使用break/cintinue语句跳出循环:在循环语句中,不确定循环次数时可以使用无线循环;如:while(true){ .... } 或 for(;;){ ... },但只有当程序块满足一定条件后才跳出循环,跳出循环使用break和continue。

break:终止当前循环,包括:while、do...while、for、foreach、和switch在内的所有控制语句;例如:

<?php
while(true){     //使用循环语句,判断式为true即为一个无限循环
$tmp = rand(1,20);  //声明一个随机数变量$tmp
echo $tmp."&nbsp;";   //输出生成的随机数
if($tmp == 10){     //判断随机数是否等于10
echo "<p>变量等于10,终止循环";   
break;   //如果等于就跳出
}
}
?>  补充说明:break不仅可以跳出当前循环还可以指定跳出几层循环;格式为:break $num; 参数$num指定跳出的层数

运行结果为(其中一种):

6 16 6 20 10 

变量等于10,终止循环

多重循环跳出展示

<?php
while(true){    //三重循环,最外层循环
for(;;){           //二重循环
for($i=0;$i<=10;$i++){    //一重循环
echo $i." ";
if($i == 7){    
echo "<p>变量\$i等于7,跳出一重循环<p>";
break 1;
}
}
for($j=0;$j<20;$j++){   //一重循环
echo $j." ";
if($j == 15){
echo "<p>变量\$j等于15,跳出最外层循环";
break 3;
}
}
}
echo "这句话不会被执行";
}
?>  补充说明:本例共有三层循环,最外层的while和中间层的for循环,是无限循环,最里面并列两个for循环,程序首先执行一重循环的for循环,当$i=7时,跳出当前(一重循环)循环,继续执行第二个for(一重循环中的第二个for)循环,当第二个for循环中的变量$i=15时,将直接跳出最外层的循环。

continue:没有break的作用强大,continue只能终止本次循环而进入到下一次循环中,也可以指定跳出几层循环;例如:

<?php
$arr =array("A","B","C","D","E","F","G","H","I","J");  //声明一个数组变量$arr
for($i=0;$i < 10;$i++){      //使用for循环
echo "<br>";
if($i % 2 == 0){     //如果$的值为偶数,则跳出本次循环
continue;
}
for(;;){           //无限循环
for($j=0;$j <= count($arr);$j++){    //再次使用for循环输出数组变量
if($j == $i){    //如果当前输出数组下标等于$i
continue 3;    //跳出最外层循环
}else{
echo '$arr[$j]='.$arr[$j]." ";   //如果$j和$i不等,则输出此表达式
}
}
}
echo "这句永远不会输出";
}
?>

运行结果为:

         //此处为一个空行“<br>”

$arr[$j]=A 

$arr[$j]=A $arr[$j]=B $arr[$j]=C 

$arr[$j]=A $arr[$j]=B $arr[$j]=C $arr[$j]=D $arr[$j]=E 

$arr[$j]=A $arr[$j]=B $arr[$j]=C $arr[$j]=D $arr[$j]=E $arr[$j]=F $arr[$j]=G 

$arr[$j]=A $arr[$j]=B $arr[$j]=C $arr[$j]=D $arr[$j]=E $arr[$j]=F $arr[$j]=G $arr[$j]=H $arr[$j]=I






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值