cncml手绘网

标题: PHP跳出循环的方法及continue、break、exit的区别 [打印本页]

作者: admin    时间: 2019-4-11 11:13
标题: PHP跳出循环的方法及continue、break、exit的区别
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:/ P/ |1 o0 c- U3 W
  1. <?php
    0 s2 |1 n- t7 o1 V# A% j

  2. ) z' u" T0 P: _+ h  B4 T8 p
  3. $i = 1;
    - r& N! a* p  g
  4. while (true) { // 这里看上去这个循环会一直执行
    & y1 O# M+ Z6 i( N# F; f" M& M# H
  5.     if ($i==2){// 2跳过不显示7 n% n7 Q1 q$ s, ~
  6.        $i++;
    ' z0 J& Y- F! j9 q! D. M6 Q' ]
  7.        continue;
    ; U9 W, R; I* t. b0 t
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了
    ; z( {8 S. W( o
  9.        break;2 W2 l$ A6 \, A$ ^6 _
  10.     } else{
    ' l6 W1 F0 I6 ]! G2 h
  11.        echo $i . '<br>';4 Q' L. p$ A" V  c+ }" f8 N
  12.     }3 v7 f+ D2 u( V( B* A) `
  13.     $i++;
    / Y3 X# K  P; c2 N
  14. }1 w1 q& ]. G" w& N+ `7 J" D
  15. exit;
    - S: L& v7 h1 g0 k0 N* s: g

  16. 9 {3 a; f: }1 Q% ]6 y7 @9 J7 Z
  17. echo'这里不输出';
    " J9 I# s' H$ [/ p5 R. s* Q
  18. ?>
    7 k3 _6 t7 k$ o/ L
  19. % c$ k, _, S! K8 E8 o. C( P  B
  20. 结果:' Z# j( ^, _  ]' g0 b- l
  21. # S0 A. `( u7 x4 M- z$ A! W2 T& C: ^
  22. 1
    " ~6 ~9 h6 r$ v
  23. 3
    8 H! M6 `/ }8 m; a
  24. 4
复制代码
continue3 S3 v$ j3 D3 S% M
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php+ _) y: o+ r: N
  2. for($i = 1;$i <= 100; $i++ ){
    8 X; b3 p% m* {+ ^# r& @
  3. if($i % 3 == 0 || $i % 7 == 0){
    / A( j% x" S( k
  4. continue;
    : J' C# G4 d- V2 ?1 Y$ n
  5. }" H2 \  G/ Q- J7 P
  6. & #160;  else{2 F$ |6 Y( a* W" q- p0 ~% p
  7. echo”$i \n<br/>”;
    " Y* s8 ]! i) q) C, O
  8. }* d+ N7 l$ a3 }+ \
  9. }
    8 X6 b) ^# s! }$ `
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){
    3 @* B+ a7 Z8 L* ~( ?4 Y& K
  2.     for($j = 1;$j <= 10;$j++){, G' h4 q! m; P  c6 f) U5 K& I" `
  3.         $m = $i * $i + $j * $j;# a% Z5 W4 q# w! i. {
  4.         echo”$m \n<br/>”;
    ! ]6 a9 I2 V' M0 W9 ^
  5.         if($m < 90 || $m > 190) {
    3 f4 ]' h, Z4 r) \: x" X. ]! N
  6.             break 2;
    " C  `" g1 Y6 ^* B: P3 G
  7.        }; h" a7 J5 t* U. \  N
  8.     }# \+ d6 P( d2 x
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
# z" ^- Y! n, J' l# m- z下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){) j0 F& S3 U* ?; @4 I2 a* ]
  2.     if( sqrt($i) <= 29){
    . Q7 E, C6 |- I' Q/ A$ u
  3.         goto a;. A. @" {. e) z0 l! a
  4.     }6 j1 \- F& _0 V% x4 p1 V
  5.     echo “$i”;
    3 P4 i  h; R3 H9 I, o
  6. }4 c$ l1 C; \* Y0 T7 W
  7. a:
    & H9 ~, W+ [( _
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php
    8 ?& Z; a2 S  l: v
  2.     for($i = 1000;$i >= 1 ; $i– ){! o9 B# `" h. c- c6 b! ]0 m
  3.         if( sqrt($i) >= 29){) ^* ~0 q  v' S: {" j* K
  4.             echo”$i \n<br/>”;3 w3 O& w: ]! E# |4 y
  5.         }2 D$ [/ ]7 @1 ^7 b0 R) q9 f
  6.         else{
    6 q! v* r3 q* n3 D  M
  7.             exit;( i+ {% U$ z8 M- w" w# ]" K
  8.         }9 d: _7 L  Q8 l6 H' ^' H
  9.     }
    $ W. |8 Z, B, N
  10.     echo”本行将不会被输出”;
    9 f! [6 K/ A) Y7 I
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php
    9 r& e: k$ G7 X6 u% K' c2 O
  2.     for($i = 1000;$i >= 1 ; $i– ){
    / G4 B4 L, w+ }& i2 @4 [2 A% ]
  3.         if( sqrt($i) >= 29){
    & |; r* D: m8 J
  4.             echo”$i \n<br/>”;! N+ l7 j( @2 p: C& B! ~
  5.         }
    1 z' Q& a9 N  R5 X% R( a
  6.         else{4 h( C" g- L# Z& Y* r# V  H# O
  7.            return;
    # x5 ^9 G( _, y
  8.         }! @. n" b. m8 @- M
  9.     }
    3 `- `# h, @1 V, v% R. b
  10.     echo”本行将不会被输出”;5 s$ h* M) B" C; n4 w0 V: R( W
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;
    , ?4 F8 y/ N0 J7 E# }% j
  2. $s=1;! w: v; i/ y9 Z9 E$ ~4 z, d9 C
  3. while($i==0)
    2 r$ c: A6 E! }! Q* V- G
  4. {
    " ~9 J  x* R3 E" x  s: u' x
  5.         if($s==1)
    ' A! j3 y. z( f% r9 [' V& [
  6.         {
    0 b3 r) c; z9 u1 u
  7.                 $v=8;- k& \4 e0 F, j: w
  8.                 break;
    * F- ?6 B. }4 L! \  U; d
  9.         }
    - I1 u4 q! J% N3 ], Y+ C8 [2 c
  10.         $v=9;
    & j9 x  `# [- Z1 Q4 h: t5 X* R' N
  11. }
    3 N- d' [; L6 X* }4 X

  12.   K8 r, ]: p/ F
  13. echo $v;
复制代码
+ M' Z- }" `! M

$ i0 z. _6 m7 R! S1 C




欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2