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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-11 11:13:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
; g* e2 a% S. u/ e( ?' }* F
  1. <?php9 A2 t* j- p" ]) g* H3 t; d
  2. 5 f# r* T/ V& @1 o+ k
  3. $i = 1;8 A0 ?" V" `2 y4 I5 u5 t
  4. while (true) { // 这里看上去这个循环会一直执行
    * d/ k0 n  {, U5 E3 W
  5.     if ($i==2){// 2跳过不显示7 _$ [: G3 e) @8 v8 [
  6.        $i++;
    9 y. U8 L, ~! p! j9 B8 n( h4 L
  7.        continue;
    5 F- p9 S0 h( I' @- V
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了/ [3 S5 n6 q9 G) b. I
  9.        break;3 Z4 `: Y9 K- E! Z2 N- b$ p  G
  10.     } else{- b. P1 e: @) r3 i: i8 R/ K
  11.        echo $i . '<br>';+ L) ~; G0 Q% O4 x- d, [# {
  12.     }
    * n: {/ M7 G! G1 d0 m/ p
  13.     $i++;" u4 o4 z% L2 Z1 h* }% S0 G9 B
  14. }
    ! E' `# y: s) y
  15. exit;, W8 O2 Q, W8 y# n" p

  16. ( w1 V' R4 d+ _% R5 T" Y3 _
  17. echo'这里不输出';6 m; O  `& B7 R0 F9 u
  18. ?>
    8 C+ n: ?9 U" v( r
  19. 9 E) I1 a$ f, [3 x
  20. 结果:
    # U/ E6 W( a8 z4 J

  21. $ Y! u% V! c- a+ W5 g, ~% h
  22. 1
    0 K: K- F  c, L8 F; P6 n3 R
  23. 3
    ' l( f0 t$ q# A. w, [* C' z
  24. 4
复制代码
continue
3 |7 Q4 G, ?  J$ V
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php* w" z6 ~$ o& U5 x
  2. for($i = 1;$i <= 100; $i++ ){
    & A8 n! A# b! R5 F) h- s, p
  3. if($i % 3 == 0 || $i % 7 == 0){  ~+ l; K1 h' ]: L% ?0 R& l1 X: i" D# n
  4. continue;4 A1 \2 d1 p9 z2 K! h4 s$ ?" Z
  5. }
    5 l2 D* `! n3 |. J0 Z
  6. & #160;  else{) E6 n" a3 n4 t7 A/ s2 r
  7. echo”$i \n<br/>”;7 D4 A5 W4 x$ b8 M, ^+ B$ n
  8. }& X' d) e3 @* j( G+ L9 L
  9. }, \  d. v  T2 u9 e& [  G% x9 [
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){
      a4 j5 _; |5 S1 A% N
  2.     for($j = 1;$j <= 10;$j++){
    5 }9 Q3 k# u( u) r6 x3 b2 G! |) g
  3.         $m = $i * $i + $j * $j;
    % M  U1 \% q; c. m
  4.         echo”$m \n<br/>”;/ g" _1 [+ y. m0 ^( z
  5.         if($m < 90 || $m > 190) {
    ; c# t9 e, _2 \, h( ^7 [
  6.             break 2;
    ; W4 A0 e0 L) s' X
  7.        }
    # |, Z" A3 R9 i/ w8 n/ c
  8.     }
    + C2 [3 A8 Z9 V+ M$ x" f  H7 j
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
: X$ E# K; D9 b! N2 S+ t4 ?, J- `下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){% e; y7 _2 u% Z5 J5 Y) w. X
  2.     if( sqrt($i) <= 29){: ~& f( O3 o  Y6 l7 L# `
  3.         goto a;7 q  l* v8 w5 P) q* k& y) B5 X% a
  4.     }  B4 w0 b# j3 Z' z- m
  5.     echo “$i”;* G5 r7 R$ k+ o/ U0 C5 ]4 N
  6. }
    * L) C' T, v& A. h4 |! Q
  7. a:
    . s* X# X! g; g+ X0 G" J
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php
    - ^7 Y4 Y: r' o
  2.     for($i = 1000;$i >= 1 ; $i– ){. t: F2 M1 j# q# q6 w: a4 s
  3.         if( sqrt($i) >= 29){
    / u3 O! L  D; d- O' v
  4.             echo”$i \n<br/>”;$ ]  G. v  @: r. R; a! a
  5.         }
    . ]+ b6 l/ H% s* o  V: m
  6.         else{
    / D+ Q2 _$ Y4 f. B2 x
  7.             exit;
    1 M6 u5 y: A+ Y. D6 W' v  Z
  8.         }
    5 `. X" \; x( g2 _8 `# U! G
  9.     }* b/ {# Z: `, a0 W! y3 _* e" @2 |$ t
  10.     echo”本行将不会被输出”;) s  {( K% F: U
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php, N. r  s8 V8 u0 d; n0 f+ J0 q
  2.     for($i = 1000;$i >= 1 ; $i– ){: P$ Y/ e# w0 @- l
  3.         if( sqrt($i) >= 29){
      b8 |* o0 U" o' x
  4.             echo”$i \n<br/>”;
    : u; X7 Q) `' I: m0 m3 x) v$ A
  5.         }
    ) i9 ]6 Q$ B4 [3 l7 a
  6.         else{) X0 s- }8 C% \3 `
  7.            return;: H& o  P+ i9 N* U/ }5 M1 w6 V
  8.         }8 ]/ l( ^8 T2 z$ d! ?0 s* p' T6 r
  9.     }: c3 J$ [+ ~$ v6 i
  10.     echo”本行将不会被输出”;
    ' ?  T9 Y# B. U# l5 O5 _
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;
    ' B' z8 c- j' z5 Z& M
  2. $s=1;
    3 n- L# S  ~# e
  3. while($i==0)
    ( v0 y9 t$ D  y
  4. {
    4 a; n0 |9 q) U
  5.         if($s==1)
    9 z$ J# a' [* S+ t$ b! L1 P
  6.         {
    1 K# p% R* ^$ k5 u  X+ Q  w
  7.                 $v=8;. V% y& c# A- E9 b2 b/ d  s
  8.                 break;! e5 w/ z# E. k  y5 e7 Z
  9.         }3 I+ i, p4 _) c1 a
  10.         $v=9;! t& Q9 C3 l# \" J' j$ k* I
  11. }
    0 H' W3 e2 B* v1 ?2 k& x5 y

  12. , |7 a7 M# D; N
  13. echo $v;
复制代码

8 I( L9 @* H! W* Y, ?' d9 A7 c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:50 , Processed in 0.072891 second(s), 20 queries .

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