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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-11 11:13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:; `( W# p+ m8 N" c1 @% W
  1. <?php( x2 P) _8 N8 s% P9 m: r3 y
  2. - z; g( j4 R" W7 Y. h4 Q9 K
  3. $i = 1;
    * v% i, R  _  Z: r: A
  4. while (true) { // 这里看上去这个循环会一直执行1 u; E0 a0 v& G+ z3 P% t. ]* r& P
  5.     if ($i==2){// 2跳过不显示
    0 @* r* c' v5 ?
  6.        $i++;2 m2 F" b3 ^- }1 {# c0 u. Z
  7.        continue;" D7 B' D) s1 q9 P2 ~8 F  Z( D
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了' I/ P; h/ \1 |
  9.        break;
    5 z% n( ^$ U4 m+ P3 Y
  10.     } else{) v% M1 [) S2 L1 @" {9 _5 P7 A
  11.        echo $i . '<br>';- ]9 u" Z$ @. q+ d7 }1 a! L% C
  12.     }
    " _9 r1 W; ], v2 T& `
  13.     $i++;. P8 U* P3 u1 t1 @
  14. }  O, `! x) p9 h) Y+ `. I( N7 z1 P
  15. exit;& n# H6 V0 T' q6 D+ a0 }, t! T

  16. . w; \7 P5 p: ^% ^, G
  17. echo'这里不输出';6 w% Y! I' P8 v8 J/ E  ^: K
  18. ?>, X8 B7 \5 z( C- A: }! K' h5 ^/ N* |2 M
  19. , s* `- F/ @) X. L2 A( }# x, D- v/ i
  20. 结果:' g, r5 A. q: v9 y% R, U% i# L7 f

  21. / n* C8 ]9 L4 y  R& F- x% F
  22. 1
    1 p; @+ g) e% |/ b
  23. 37 H/ Y* ?: N9 d. _
  24. 4
复制代码
continue  p& v& e9 N0 Z
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php+ b0 `7 ~; }3 K: J0 z
  2. for($i = 1;$i <= 100; $i++ ){" ~% s6 [0 O5 s. B
  3. if($i % 3 == 0 || $i % 7 == 0){
    # H4 Z; `2 P% X% C# v8 c
  4. continue;
    $ F8 k! L3 V  f. X, X; C( q
  5. }
    * L3 C' L) F8 ]
  6. & #160;  else{3 M5 \+ O7 L  |( R  m* `' e: j  h2 e. t
  7. echo”$i \n<br/>”;
      I4 [) Z+ U6 P% m/ {
  8. }8 ]. Z) y+ X- U" d& |
  9. }
    . t" ]# A. K8 Q0 Y" C( Q8 h! O
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){
    9 ?! s8 t7 w2 U
  2.     for($j = 1;$j <= 10;$j++){3 J6 K; u; l" E) X- O
  3.         $m = $i * $i + $j * $j;/ ^1 q' D- l4 G6 i/ n
  4.         echo”$m \n<br/>”;1 W5 {. y+ x% t
  5.         if($m < 90 || $m > 190) {9 Y9 [- H; d: M, b1 Q
  6.             break 2;
    - R* W' s( }4 u
  7.        }
    : R& P8 }2 r4 z/ x. H
  8.     }
    ! C  g2 P9 H1 a+ ]: G
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
  Y0 h: A6 Y$ R* n( b& l- {- o8 Y下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){
    2 {# h1 }- a2 G" v, N
  2.     if( sqrt($i) <= 29){3 m! K. C! x# f8 W, Q. N+ q
  3.         goto a;
    0 U+ A" S; }/ z2 V) S" ~+ b. Y
  4.     }$ b( ^+ L8 D. o% D7 Z0 l  B
  5.     echo “$i”;
    ! P. O6 e* k+ P+ Y8 Y1 O/ N" c$ w
  6. }. Z' u8 |1 v/ c+ @- I% T& v3 |
  7. a:
    ; ~& }2 H1 y- A- @3 q4 ^
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php4 v# E1 w* D6 Y2 t& a) B- h
  2.     for($i = 1000;$i >= 1 ; $i– ){
    7 R6 Z( a% F; H4 }
  3.         if( sqrt($i) >= 29){1 Y. c- E8 a; A2 Q/ ]* Y# G0 ~
  4.             echo”$i \n<br/>”;% q. F% A2 e) n
  5.         }
    ) `1 s- k8 x# r0 v) \# C
  6.         else{
    8 h6 X* j8 O* K- \+ p) H" k: N
  7.             exit;
    8 G( f4 _8 s2 t) n/ W' D
  8.         }7 F* p2 H- r& r2 J
  9.     }
    % u# o' x7 g$ b2 F
  10.     echo”本行将不会被输出”;
    * j2 d' o7 g, W" A% l0 T( t2 d
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php5 b8 \7 Y& E  B; K- r
  2.     for($i = 1000;$i >= 1 ; $i– ){6 K4 ]) B: B& t
  3.         if( sqrt($i) >= 29){& W4 M- [6 D, Z* [( v9 z" `, g
  4.             echo”$i \n<br/>”;
    " m& g; D% i! B& Q/ H2 i' ]' L
  5.         }
    7 M, ]" m8 M7 J! `  j7 h2 F0 G% K
  6.         else{( S  a8 M% n$ p
  7.            return;  B2 d3 ~5 d* _1 U. N5 H
  8.         }# F; n& H& x. Y; Y3 C: H7 ]
  9.     }' o. ]/ a) J6 r! o6 g
  10.     echo”本行将不会被输出”;
    # c6 R- l4 G* c/ Z: C; X
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;# H# ]4 m0 ]: @9 {8 Z$ g8 T
  2. $s=1;: {, k9 e( x& @' f8 Y
  3. while($i==0)
    4 s3 \; S! O: U" f5 u" W# ~* {' Q
  4. {
    " a& y3 a3 h! f% n5 ~
  5.         if($s==1)
    + e& k  R* S5 u; @
  6.         {
    ' @/ c9 F8 ]5 T: k" R; y5 y) Y( S% Z
  7.                 $v=8;
    . H& X7 P/ x' d6 B2 z3 S
  8.                 break;' j0 r& A9 Y) d) {
  9.         }0 o5 i+ x0 J, a2 \
  10.         $v=9;
    8 ^. j0 \7 C  i! @, S
  11. }
    + r! z0 H  _  ?+ {" `& B
  12. 1 s5 J$ _) i$ d+ a& ?
  13. echo $v;
复制代码
+ H$ U* s3 L- f' b2 Z

" w1 z! ?) r  M3 {4 ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:59 , Processed in 0.073722 second(s), 20 queries .

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