您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10974|回复: 0
打印 上一主题 下一主题

[php学习资料] PHP跳出循环的方法及continue、break、exit的区别

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-11 11:13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
: r2 M/ v7 X* l8 G
  1. <?php
      A. E, E+ A# _" L
  2. 5 Y* j6 r; j5 @1 {9 S" I2 t0 ?
  3. $i = 1;( |" ~& ]7 Q1 z) _: R1 P
  4. while (true) { // 这里看上去这个循环会一直执行
    , C- f* Q; G7 X0 V; k# Y, g& ]
  5.     if ($i==2){// 2跳过不显示3 b* v4 p5 \. {% R6 i
  6.        $i++;3 D# C1 o5 |  |8 D- v7 _
  7.        continue;
    4 T! n- B! u: n5 E0 ?- X% E
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了4 G& a" Y/ `' n, z
  9.        break;6 L2 y- M2 g0 }" p+ A  J
  10.     } else{
    * @+ J% w7 p5 E  @0 n7 h
  11.        echo $i . '<br>';% u5 X1 ^0 W; z" P+ ]
  12.     }
    0 h! G- y+ d" g5 `* g
  13.     $i++;
    2 z3 F" g  e9 `
  14. }
    : G6 O1 n  B. |( ^. f5 t
  15. exit;- T1 ~% x/ d1 @" g% O

  16. % v( V; U# {1 v  p9 ]( u
  17. echo'这里不输出';# d4 Z; v; L; b, D  d
  18. ?>
    + o3 H& j6 `; X5 I! {7 S: C- |! R. o
  19.   N" T0 `, O* a) Z: t
  20. 结果:
    . ^6 X9 V3 R2 e% r" p1 b

  21. ; i2 ~* j/ U. V% x3 \1 v
  22. 1
    % c+ E- M3 ]: [8 `0 x  c0 O% A
  23. 3
    4 E' h8 ?: t: m! g' X. E
  24. 4
复制代码
continue
$ w" f! ?, ~: ?5 c
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php
    $ N5 t8 f. x" v% l
  2. for($i = 1;$i <= 100; $i++ ){4 ^- W- W  P' H% d
  3. if($i % 3 == 0 || $i % 7 == 0){
    & i9 r- M" G9 W' \: z/ k! ?
  4. continue;
    6 F# P- }/ W- G+ V! @2 C( g
  5. }% B5 j; w  @8 r* v. `' H2 k
  6. & #160;  else{
    * Z3 z- S) Y( O. E
  7. echo”$i \n<br/>”;) D8 ^: y" B" x# D2 }
  8. }+ ^# \; m  A' e
  9. }
    , X& X$ `3 j0 v2 M; @  Q* n9 M$ }  I
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){) K. n, `+ `9 ~, {& \. A
  2.     for($j = 1;$j <= 10;$j++){
    3 d' h! `3 o: _& _" p
  3.         $m = $i * $i + $j * $j;8 ?& `8 n, g' `0 T7 i
  4.         echo”$m \n<br/>”;/ d! J. O/ H3 s
  5.         if($m < 90 || $m > 190) {
    - ?8 p/ |6 J* G! R5 ~
  6.             break 2;
    1 @5 Z) ^3 y* j1 @8 V, J
  7.        }
    5 X+ o! B+ Z& p' L2 {
  8.     }4 U* [2 W' `. ^* @: n$ D
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
+ \  b! b6 s+ r( `! r下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){  E) l7 v* y! I5 E) }2 e- a
  2.     if( sqrt($i) <= 29){' z( M0 ]1 s, l" J9 j
  3.         goto a;
    8 D  [/ h; o# Z2 i# j# Q- L8 i* W
  4.     }/ Q, h9 p1 c/ V7 d; O
  5.     echo “$i”;$ Y. n0 z9 v& w
  6. }. M$ e$ i- X* Y$ y2 S- a7 m- k
  7. a:
    ! r/ T& r5 B+ {$ Z8 w* O( T5 s& b
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php  H, J9 c7 }3 u0 I
  2.     for($i = 1000;$i >= 1 ; $i– ){
    8 d+ G: R1 I& Y% }' S( x
  3.         if( sqrt($i) >= 29){
    $ Q  `& u6 o+ C
  4.             echo”$i \n<br/>”;
    % p: L+ D2 p% y  z
  5.         }
    7 l6 k) a* m6 r, S' w
  6.         else{6 G; l! _  V9 y) H/ r5 K' N
  7.             exit;" M( U2 H) M$ j4 O! a, B9 D
  8.         }
    . s3 m7 {, Q+ E- ~/ V1 @7 B0 @7 {
  9.     }' m( \7 ~8 K3 A& I* {9 N
  10.     echo”本行将不会被输出”;! g- z) r( Y4 Z( ~. W1 V
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php
    7 W! v% G7 B- o: [+ c# h1 F
  2.     for($i = 1000;$i >= 1 ; $i– ){
    ! v$ u+ X6 j# e
  3.         if( sqrt($i) >= 29){
    6 e+ k, Z+ q- @: L
  4.             echo”$i \n<br/>”;
    ) n( k7 E6 B% ?$ Y% }1 p2 E% ^5 O
  5.         }
    $ m& [3 ?3 J. I5 C6 u- J7 X8 I9 t
  6.         else{
    0 G8 @' d6 i0 j; {  f1 P+ l
  7.            return;/ H7 x( n! N6 s1 A
  8.         }
    1 C$ m* s( p1 _6 y
  9.     }
    / }' C/ j4 N6 r, V
  10.     echo”本行将不会被输出”;
    ! X7 ^$ N6 E4 _% g% o
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;, l4 G$ X& H$ Y) X7 z. E
  2. $s=1;7 x9 ~1 M; G& \7 ?7 r3 O
  3. while($i==0)( f# A6 O& a2 Z( ]
  4. {" J: W; i) b( X( t/ `  J
  5.         if($s==1)9 z9 j9 _% q  U' ?9 H/ H
  6.         {
    2 V, g% `, g3 z# t" k8 g! D
  7.                 $v=8;4 k' ?& D/ p& e4 h4 l% [* M
  8.                 break;
    6 z% N+ j+ M5 D  M. ?% H* k
  9.         }/ F: G0 c7 \) K8 W" Y
  10.         $v=9;
    3 M! U* m6 r( b
  11. }
    & ]3 M# |. H* \" p5 {9 ~* S3 Q
  12. 3 P; p3 r- H8 ^* U
  13. echo $v;
复制代码

! [* A  j" n2 J; S' Z4 M$ f
  m' f7 m1 j/ |: Q! G' p+ _% j+ N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-8 12:15 , Processed in 0.137454 second(s), 21 queries .

Copyright © 2001-2024 Powered by cncml! X3.2. Theme By cncml!