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

cncml手绘网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1306|回复: 0

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

[复制链接]
发表于 2019-4-11 11:13:59 | 显示全部楼层 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
# a: Z' F0 \# O
  1. <?php3 W7 F3 E0 c3 y4 y

  2. 4 g! Z# P4 z+ H6 ^* w9 R; C
  3. $i = 1;% J' v9 x: X4 ]: \
  4. while (true) { // 这里看上去这个循环会一直执行
    ; V3 [5 [: h6 r2 Q! x2 B
  5.     if ($i==2){// 2跳过不显示# ?' x1 P7 F1 _2 ?0 ]" v
  6.        $i++;( K! m0 F/ P0 _
  7.        continue;1 g, k. D5 g" w* j
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了
    , ?, A2 ]. A6 j# F: Z/ Y; o- v
  9.        break;
    : w6 P( ?4 Z; S% @# [$ o1 P7 A+ P
  10.     } else{
    , \# d) n" s& Y6 z
  11.        echo $i . '<br>';
    5 {( z6 t' w1 F1 W) Q* t/ S
  12.     }7 e. h( V( x9 g$ i4 q) w" A
  13.     $i++;3 |! D6 ]; ?0 w$ U; u7 o1 W2 T0 t. p
  14. }
    * t4 x$ {; {, S
  15. exit;
    7 D& [& o) l. y# K" U

  16. ; J1 O) H+ s! O
  17. echo'这里不输出';
    ) E4 N: a7 ?9 g! A1 O
  18. ?>
    + N+ k  f" n2 B

  19. 0 T  ^! ]6 }, r& U
  20. 结果:
    & o0 e. X/ E7 [1 w) b# y

  21. " {# r! P$ T  W- K4 D, k5 z
  22. 1! g: M% D+ r, A
  23. 3' }" G- S% s! p" a3 K. q
  24. 4
复制代码
continue
, K. H" h0 y0 ?
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php
    2 R8 A1 Y1 r& U, I4 u7 u: T  n; m
  2. for($i = 1;$i <= 100; $i++ ){
    5 M, L1 J3 @3 L) i( n2 n" v# Y
  3. if($i % 3 == 0 || $i % 7 == 0){
    7 Y  ~  {9 X3 A8 r1 n1 q1 N
  4. continue;
    % h3 D" E1 {6 |# J/ `* A7 G& e
  5. }" C4 y2 h! x, D) i2 W& o
  6. & #160;  else{
    ( c4 g# t8 }1 w/ D- @1 b. W
  7. echo”$i \n<br/>”;7 M$ o; H0 w& j
  8. }  ~, S5 e9 y. ]: o
  9. }9 d/ M8 e) C- y) B, O
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){) r  H. C; e0 e, P
  2.     for($j = 1;$j <= 10;$j++){% g/ F$ K1 o7 `) ~2 C1 O
  3.         $m = $i * $i + $j * $j;9 h, K8 y1 l- M$ a$ ]: f
  4.         echo”$m \n<br/>”;1 ~0 `+ d& j1 E3 k1 I) d
  5.         if($m < 90 || $m > 190) {" |- {0 k# T9 J1 Z' E- l
  6.             break 2;
    7 {+ @- j! q- J, D
  7.        }& u  }. d) k# A% L9 C) K2 u9 a
  8.     }! j+ C/ j$ @+ e/ C- Q$ i0 v
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
5 S# ]& O1 C* A! j% w下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){
    + T. x. E% U* z7 ~
  2.     if( sqrt($i) <= 29){0 b! a7 t; F: {: S, j. p7 \2 p
  3.         goto a;
    7 e: \( }8 K# ^, P& i* ]
  4.     }
    3 v; \+ J+ n  I; r& D. i+ i! B
  5.     echo “$i”;. G6 ?5 g  M' C
  6. }
    7 N1 _8 K# R9 w; T1 N# ?, R* S2 k
  7. a:
    3 a0 P& J0 q2 R& V, j! R( f
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php! d! t  E% S! {3 P7 r& N
  2.     for($i = 1000;$i >= 1 ; $i– ){- B) y  `6 i" K7 p5 p3 @  L8 i
  3.         if( sqrt($i) >= 29){" @5 D0 ]  I9 k& g
  4.             echo”$i \n<br/>”;
    ' p1 J2 y# ^5 ]( p% B" T
  5.         }- K5 z. b8 U5 L) c! D
  6.         else{
    5 G% a9 A$ H* C: @( f. M2 }2 `
  7.             exit;
    & i' k6 f7 A" M% s9 j
  8.         }% R+ O# ~5 e. q" ?
  9.     }& N0 Q; V( {# O- z
  10.     echo”本行将不会被输出”;
    / D* F6 e+ m8 Q* r0 v
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php
    / i2 }) X) J0 s2 y
  2.     for($i = 1000;$i >= 1 ; $i– ){
    + O2 h/ o1 \' ~; l: S
  3.         if( sqrt($i) >= 29){
    , r5 g' f2 V1 w5 y0 c
  4.             echo”$i \n<br/>”;5 ]# A# w% A$ i5 C2 W; l, _
  5.         }% C1 o% W- F, Q& y: T
  6.         else{: ~- b- v5 {) o' x* M) b; \
  7.            return;$ N5 L' Z9 U  w+ S
  8.         }
    ( H8 Q) o! J0 N- _' l7 y
  9.     }
    & s9 A) j3 {  [  k( P" q' B: g; c
  10.     echo”本行将不会被输出”;
    ; P1 h+ J/ |0 ^" K( \
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;) n1 Z' _4 ]! @# G5 x
  2. $s=1;) d, ]0 o2 x: N! k
  3. while($i==0)" H. v! Z/ C! }- p. l
  4. {
    3 d5 a% w1 F  i. _
  5.         if($s==1)
    $ y; M6 @5 R" O7 x+ U$ m/ y
  6.         {8 \& G% h3 h. n
  7.                 $v=8;7 e. D. n" x. N. b0 b. |% ]% ^
  8.                 break;& @& q3 ~6 P; g" e* V
  9.         }7 {  b8 ^. @. |. I
  10.         $v=9;6 m9 f4 ~4 c! u, t- V
  11. }
    8 ]/ t# m6 }  }/ Q3 m
  12. $ I/ ^/ W& m& ]8 }
  13. echo $v;
复制代码
4 l6 e8 d) _$ H! T

, [- U4 @' y8 q3 [
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则