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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-11 11:13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
- `8 Q1 D3 A. R
  1. <?php7 ]3 a, [6 `+ ?# T0 |

  2. 8 t( S; F- Q3 d9 ?/ C, z
  3. $i = 1;5 _) M% `0 C! f* X
  4. while (true) { // 这里看上去这个循环会一直执行7 g, A- s  N$ ]$ v: Q' s/ j) l/ N
  5.     if ($i==2){// 2跳过不显示
    0 o; j1 F" Z& W7 h5 C' m  W  n
  6.        $i++;
    ) O  b( }( k: H% ~, X& C* n
  7.        continue;
    ' ^7 f) K; P0 p, N9 o6 C
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了4 E' g# h3 @: {+ U( }0 [- x6 @( y$ L
  9.        break;. e) G. K; W+ f% @1 o) k; }
  10.     } else{
    5 C  |) R. H( v9 s) h% B
  11.        echo $i . '<br>';  W6 E, z# V9 Y$ E+ R) f/ T
  12.     }
    ; \' ^( O- ~4 \$ e/ u
  13.     $i++;9 O( x' M3 g7 F3 k+ s; d6 j
  14. }
    * e: E+ }. [- Y# U9 `  V
  15. exit;
    " c' C; l: s% h4 ~) n0 Y

  16. # O2 x; B- b* c
  17. echo'这里不输出';8 V. F$ g% m5 k5 f, {
  18. ?>
    * v0 ~9 f' B! B; f" |& q, G. c4 U

  19. 3 e; |4 I% K& q) d3 n6 U
  20. 结果:9 q, |1 G2 a" T! t! @2 N1 m
  21. 3 r0 [$ W" f5 G
  22. 1& R6 t( e0 n& g
  23. 3
    / K) \) P( ?& h% d. }. Q
  24. 4
复制代码
continue
+ H8 i  i" y4 R( H
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php
    ) x+ k: ~0 q, P
  2. for($i = 1;$i <= 100; $i++ ){
    3 T- o" x, Y; d# N0 l( e$ T# ?8 r/ w
  3. if($i % 3 == 0 || $i % 7 == 0){4 z1 G& n. p( a
  4. continue;% k) _% A- F; }/ B7 y" J
  5. }- l3 x6 t' t8 j: d# u$ _: Q- \
  6. & #160;  else{
    ! D* d8 e) ^% |# i5 l
  7. echo”$i \n<br/>”;
    ! |( s( i8 o) _2 p  w( w- b
  8. }
    8 `5 g) _4 Q9 F# ]* x& x8 O8 {  m. e
  9. }5 d0 L* n* N8 u3 b0 S- i: P
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){
    0 P6 j) @* M! V' Z( M
  2.     for($j = 1;$j <= 10;$j++){
      V! |8 W- G$ n/ T4 `
  3.         $m = $i * $i + $j * $j;
    : B0 ?* n% o$ |
  4.         echo”$m \n<br/>”;. M7 C1 N; Y2 v9 N3 `9 D% ^
  5.         if($m < 90 || $m > 190) {
    1 |0 V, J- I- j
  6.             break 2;5 K7 d" a% P3 ]- f6 m! H
  7.        }& e/ X! @  H2 l& R& w: M* U3 @# R
  8.     }
    & b4 g4 J! o2 c% T5 s0 u* A. j8 f6 k
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。6 @* m) u' z- }0 N' n' Y# Q
下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){. E" g% b  f: C. z
  2.     if( sqrt($i) <= 29){( i7 Q: K) a# c* t7 f0 _
  3.         goto a;
      z+ B# Z1 B' e
  4.     }: O* T8 X6 L/ t! z3 a, e
  5.     echo “$i”;) W1 Y4 i- ^/ c. K. g" q" L  D/ e. l
  6. }
    ' r  w8 D8 C- C! G& S
  7. a:
    ' z& |; `' I) }$ b
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php
    ' b5 ^5 @$ X- U5 j
  2.     for($i = 1000;$i >= 1 ; $i– ){
    - `" e1 R0 ~2 S
  3.         if( sqrt($i) >= 29){6 H5 z' v5 k! F8 Z: P+ R" I" B
  4.             echo”$i \n<br/>”;
      K6 v- h: O% b8 c8 U6 S/ @2 z$ {
  5.         }
    $ e: e  m$ E0 a; p3 v" O
  6.         else{
    1 D7 |5 I$ w  e( Y8 [
  7.             exit;
    , y2 w* P# V& K
  8.         }& W6 a. I. L9 T* {: H/ m+ U. t9 w) y
  9.     }' l6 b$ s# ?+ t. l7 h, [/ z1 p6 d
  10.     echo”本行将不会被输出”;, [  W9 K: @/ M
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php0 t6 m# F0 Q- E! s; g% [, h1 \
  2.     for($i = 1000;$i >= 1 ; $i– ){
    $ c8 v5 K5 H9 h/ s2 b% k
  3.         if( sqrt($i) >= 29){2 v' T( k: ~1 o
  4.             echo”$i \n<br/>”;- v  G. N7 `( O) s0 O
  5.         }# {) g2 [3 A( p  B
  6.         else{5 _+ a$ N* d4 K3 z
  7.            return;
    - b; j3 \* g6 t, K9 e9 S4 M0 n
  8.         }
    9 q. c$ P. ?. ?, N0 S  b6 u1 E! m* k
  9.     }4 G% V2 ^$ w; d) q! U
  10.     echo”本行将不会被输出”;' R5 v; c8 F1 L1 L, |; Z. u
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;
    % K' D5 p( S$ c8 _- {1 i
  2. $s=1;$ s3 I2 i9 {' H0 |4 y* p7 ^
  3. while($i==0)
    ! X' c# \, Y' c8 E2 @
  4. {/ Z' s3 A1 s9 p
  5.         if($s==1)  X- F+ N- G# I& y
  6.         {! ~; q* x- G& w9 p( `0 h, s6 c
  7.                 $v=8;
    9 P$ ^* \' X1 G' j
  8.                 break;4 B9 C7 P* v$ i! w5 J- D
  9.         }0 ]2 Y1 u0 b$ U# r/ N
  10.         $v=9;; @6 ~. C0 p+ V( E& t
  11. }
    0 K* m# l* r6 D2 l0 v+ C
  12. , u0 W) e- `: n; P& R
  13. echo $v;
复制代码
3 R* C2 s: R8 I3 x, J+ J
4 t" W* f4 J" k  w& D, `! K% y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 17:27 , Processed in 0.050034 second(s), 19 queries .

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