设为首页收藏本站| vip购买 |

cncml手绘网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 660|回复: 0

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

[复制链接]
发表于 2019-4-11 11:13:59 | 显示全部楼层 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
4 ?$ B5 x' i0 F
  1. <?php
    9 W/ R# @- @) M( Y; b& J$ x# N
  2. " L1 F# P4 U( c, U3 n& p! k
  3. $i = 1;7 R+ [) }9 |, D0 b' a
  4. while (true) { // 这里看上去这个循环会一直执行- X3 H& {$ R' w( t# j2 X
  5.     if ($i==2){// 2跳过不显示
    1 A3 U$ b8 u$ [
  6.        $i++;
    7 ?* H( P2 C' n9 `2 c6 e
  7.        continue;/ F/ W) X! n1 v4 l  a! X
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了0 p, g. t( p4 _, S: f- u, ?! C
  9.        break;
      t' x4 h  Q: @& z$ a
  10.     } else{
    8 a) f$ ?& K  L" Q, N, g% N' C/ E
  11.        echo $i . '<br>';
    7 \8 Y) {' b, W
  12.     }2 r: C- q- m5 Q. o& e4 x
  13.     $i++;+ E! e) \9 C( S3 h: g
  14. }7 z; Z3 _6 |; V+ J1 b( {0 i. y3 k
  15. exit;( L/ R' s# Y4 H) E3 s
  16. ' ?7 [5 D% t  ^' O8 Z+ a0 x: |
  17. echo'这里不输出';
    + `% ]  t/ Z0 o# m$ q1 z) c, W
  18. ?>9 L" g* u: Q# n3 D7 K2 k4 t( [

  19. ( |3 G2 S$ [* F# x: }3 H
  20. 结果:& Y0 a3 B9 ]1 J/ w! M

  21. ; O3 g% }& U& n6 o: x( h. w
  22. 1: n; A, x2 S: y7 }
  23. 36 {/ \7 y1 I& g0 a& B, s
  24. 4
复制代码
continue7 U4 _: ]: c% Z- i. C8 |
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php$ n. _0 I: |) q" d* `
  2. for($i = 1;$i <= 100; $i++ ){
    7 _8 L' N( j% {/ ^" r8 G
  3. if($i % 3 == 0 || $i % 7 == 0){
    ' G6 r5 G* E( @& q, W3 p+ L
  4. continue;
    ' p) i2 q  [! h* R
  5. }
    # Z- z" H/ d9 D" t4 d# ]
  6. & #160;  else{  q& O- T5 e; y, ~1 N. s8 z
  7. echo”$i \n<br/>”;2 s. P& E% Q0 S; [
  8. }
    # G- ?) P. i) d1 W0 K+ z- O
  9. }, v: `# U7 a# X& P# M& |
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){* y' a$ c( U; @/ d% l; t% d
  2.     for($j = 1;$j <= 10;$j++){: U; q4 F' ?3 |  z# @/ k$ P
  3.         $m = $i * $i + $j * $j;$ }. r5 t# w. x+ o# k, Q+ z  b/ L
  4.         echo”$m \n<br/>”;( d" I0 F2 N$ p. Y2 M% e) N& }- T+ [
  5.         if($m < 90 || $m > 190) {7 _/ d, P6 n1 T2 [) W/ l+ K1 W
  6.             break 2;" v' I! g& C+ _2 x
  7.        }  L9 D# ^, N3 g$ U, J2 U3 H8 _
  8.     }- d4 A" Q0 K# C+ U0 m# @7 I
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
5 @& A4 @+ ^) @, z+ k7 U" o下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){  E8 c) ?6 m0 `6 @
  2.     if( sqrt($i) <= 29){: X  S3 S" m! g& L+ C* G* h5 N2 r
  3.         goto a;
    0 K+ Z) ~+ g9 K) A+ P8 |# @0 w
  4.     }
    6 N" X& M4 C1 t- n) a
  5.     echo “$i”;
      N; U" c) E* P1 M: \
  6. }, ^9 j5 c1 `& h' l$ t1 N! }8 a
  7. a:
    9 b  F# _- B. g' R
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php
    8 o# u, f6 C( z% z) p3 [/ M2 x6 {
  2.     for($i = 1000;$i >= 1 ; $i– ){
    ) X$ q* f3 [* u$ A- G( H$ @  x
  3.         if( sqrt($i) >= 29){/ \2 f5 S+ X# w- {) G+ x8 \' z7 P
  4.             echo”$i \n<br/>”;
    9 h9 a6 K: ^& g2 _* v
  5.         }$ _* [$ ]+ w. h9 I
  6.         else{" E! }/ g/ M+ n9 H' q" ^
  7.             exit;
    7 h; o) T9 o* l
  8.         }# H0 @; E4 I" S! ?/ j$ V7 q
  9.     }7 L/ d2 v  O! _; X
  10.     echo”本行将不会被输出”;) B! w- H' ^. m0 p* m, ^' f2 C
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php
    " Z* Z7 J2 k7 Z# f( Z8 n+ T( V
  2.     for($i = 1000;$i >= 1 ; $i– ){
    : _/ E# F" m# n, f0 _' m" @
  3.         if( sqrt($i) >= 29){( y4 `( O% C  K+ a8 S
  4.             echo”$i \n<br/>”;8 {' \2 y; k( d- }
  5.         }1 m2 _2 q' L3 k8 ~
  6.         else{$ w; |9 I/ `' A3 _7 J, z% i  T' E
  7.            return;) _& }7 f0 z6 r. D* {
  8.         }$ s& F6 {# q, t" `
  9.     }8 g  Z; K# _6 p+ Q5 a
  10.     echo”本行将不会被输出”;
    7 ]- P) [& s) M. K2 @5 Y1 W0 G
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;- V6 x7 ~3 }2 a) a  s
  2. $s=1;" L( }. a9 G9 d+ L
  3. while($i==0)
    , |3 \, t% ^) W, A7 {/ R! W
  4. {
    : R6 h2 H: c$ S3 }( P
  5.         if($s==1)4 i% C/ K# J+ i. I
  6.         {
    $ r. m2 X# \6 [* \3 ^9 H( @3 @
  7.                 $v=8;' a, Z3 g" A4 M' R3 o  c
  8.                 break;
    9 w; X% d) S/ x/ F  H1 t* J
  9.         }( R  L& e1 D( z" H( P: ]- A$ p- O. b
  10.         $v=9;) h  t  l' c) c) v3 n4 [
  11. }  @$ V' i+ p, d
  12. ; L$ L# }* N8 L9 W) j. C. f2 L) U
  13. echo $v;
复制代码
/ i" }1 H8 n6 l5 j/ f
% P, c) k: q3 c0 l+ h! n8 q
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则