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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-11 11:13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
+ C1 e+ X7 {  u6 G
  1. <?php! b; \8 o. R$ H/ f6 a
  2. & t2 D+ u& V9 f/ t0 n
  3. $i = 1;- }1 Y* Z$ }+ W
  4. while (true) { // 这里看上去这个循环会一直执行
    - Q  d# K* t4 ]  x7 o
  5.     if ($i==2){// 2跳过不显示( y- U4 T# a6 J$ f, r3 D# \  {
  6.        $i++;2 M6 e4 u1 y" K" y' y  j0 [
  7.        continue;
    + a, X  y, p8 Z9 |
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了( N8 Y5 I1 u3 i( W) h
  9.        break;! S" S% U# p1 }
  10.     } else{( |4 v* {1 |3 J- b$ A! r( m) e
  11.        echo $i . '<br>';/ J4 R* ?  N/ O9 t0 B& D# ^1 Y
  12.     }
    0 h: U) G, r. w1 c7 O) k/ D
  13.     $i++;. e* r; S8 b6 u! A: O
  14. }/ w/ `) F3 m9 Z- g- {) k8 T
  15. exit;, ^& y1 D7 C% o# L: ]) Y

  16. ) F% l& Y7 @  p3 T& @* e& \# p
  17. echo'这里不输出';
    . Q. @8 B$ J2 M! T/ L4 N0 W
  18. ?>' G! e! n. `( @% B. d+ }# l0 C
  19. 9 R& W0 [( {9 t
  20. 结果:$ x5 A3 X4 E' N
  21. * @2 ~; l  Q0 a# F
  22. 1: j  j5 s" Q: x
  23. 32 ^& f% [) L$ P6 y2 t
  24. 4
复制代码
continue
# b1 M; F" O; h+ S/ x1 A, a  h. u
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php
    5 u* r" S5 O! p5 q
  2. for($i = 1;$i <= 100; $i++ ){
    6 H5 C% M) i) Q0 m5 g
  3. if($i % 3 == 0 || $i % 7 == 0){1 g2 M8 {2 P* ~  n
  4. continue;6 I$ Z4 ^; ]3 O" ]1 F' h
  5. }
    , m8 i3 E. ]% h
  6. & #160;  else{( l2 O8 A2 N5 U2 [& M
  7. echo”$i \n<br/>”;
    $ Z# V/ _0 K% U0 w) O
  8. }) p8 ]9 Z; Y0 ~# @$ q8 T
  9. }) n" u; S) C! H; a) p4 K
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){
    - b+ Y: k$ h/ `9 n- F
  2.     for($j = 1;$j <= 10;$j++){( t8 p4 w- Q: v* p
  3.         $m = $i * $i + $j * $j;; Y% d" r+ i7 ^, C8 j2 w
  4.         echo”$m \n<br/>”;
      R1 F2 W$ a* ~7 O% b( F
  5.         if($m < 90 || $m > 190) {  t1 L6 Y( P+ W" V
  6.             break 2;
    6 j2 b- E+ X" U' A6 h2 F; P) P
  7.        }
    / r- L2 ~1 |6 q( @
  8.     }
    # B4 u1 h3 {* ~: J( b' h& m
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。7 L  k4 n. q: j; M+ U. S' r
下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){8 ]/ d1 ^" t( ], D
  2.     if( sqrt($i) <= 29){
    8 @' O  T7 j; H. \( {
  3.         goto a;
      p) b  J+ ~$ V! \9 B! @' [) C
  4.     }+ N+ [/ F- Z$ K
  5.     echo “$i”;
    / d: L  z7 j8 t7 o& O
  6. }
      }9 R- P, g6 Z
  7. a:2 Z1 Y# a4 [2 C4 r! \: Z
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php2 q, j# x6 c! Z, F
  2.     for($i = 1000;$i >= 1 ; $i– ){
    $ e7 s% k  |2 y: u# @
  3.         if( sqrt($i) >= 29){
    " r- ]& f! [1 z/ C+ U
  4.             echo”$i \n<br/>”;
    2 ?5 W, P: `! o( i8 p( X6 [
  5.         }2 n( H8 i# Z8 {1 H5 x. J5 h# f3 f
  6.         else{
    : T& E1 l  c! C5 ]0 H* k) S
  7.             exit;/ l1 o1 l$ H5 J7 S" m, X  {
  8.         }
    7 `* L% t0 [$ H# b7 @0 f
  9.     }  h; k# Z) B+ A8 k
  10.     echo”本行将不会被输出”;& K8 B1 H8 d. w$ g2 a. A& i: I
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php. X9 D( u! b7 J
  2.     for($i = 1000;$i >= 1 ; $i– ){
    + U0 K3 m1 w4 m) H
  3.         if( sqrt($i) >= 29){2 u) `% n3 |4 I4 `% I0 v
  4.             echo”$i \n<br/>”;) F4 E" M- f- z' g8 n% L( a
  5.         }
    . s9 b) M) L$ S  F: Q+ o7 _
  6.         else{4 l* C5 r. w/ R8 R; }+ p
  7.            return;
    7 q5 X$ l2 i' G1 F: M/ |
  8.         }. k; \5 r2 r. a4 y
  9.     }+ j3 E  `. E( L' ^, @, B0 G
  10.     echo”本行将不会被输出”;
    0 Y  T( V: d3 S$ F' v% f
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;  _0 O$ J9 d0 L' v, P! O
  2. $s=1;& q! J* I, I. v* L/ p
  3. while($i==0)2 Z) X: I# F/ K. ^( {9 X
  4. {
    2 f8 q9 S) r7 @4 J& U; d" Y  w
  5.         if($s==1)" o1 P6 a* B. v$ X7 B3 v. r
  6.         {
    : X1 X( p8 q; f' i: ^0 h  S
  7.                 $v=8;
    7 r5 w# F7 h9 O$ }- B1 h( P$ q
  8.                 break;% g" _! ?6 N$ q. }$ v
  9.         }
    9 j- U" z/ o, m; A
  10.         $v=9;
      n+ w6 s' `; w1 Y7 i! g( F! O: u) _
  11. }
    4 m" R  q" y: R1 q: r4 F8 \% S% J

  12. 4 v$ P! J4 J. J" g6 D
  13. echo $v;
复制代码

+ p- Z" Z/ S* s$ f" N  ~; ]0 Q7 P) L) O7 J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-9 18:22 , Processed in 0.108550 second(s), 19 queries .

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