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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-11 11:13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
  d# u; x" Q) b6 ?7 N7 i) w- H) C
  1. <?php3 _9 N% X) d2 Y, a9 I4 t; G, v

  2. : X5 a2 t/ |7 e" e; p7 S
  3. $i = 1;
    7 |: W8 b' ~& d1 S; t# x
  4. while (true) { // 这里看上去这个循环会一直执行6 b- b* ?/ s. t* V- V9 j3 \
  5.     if ($i==2){// 2跳过不显示% Q5 l" N: q8 F
  6.        $i++;# u2 Y$ {6 L8 b" K- n
  7.        continue;% S7 Z. z, ?) B  G6 y  i
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了2 @8 _  @/ m: t9 _- l
  9.        break;7 f" K. t8 ]0 T0 {
  10.     } else{/ M4 f% g$ v% a, ?( i- ?8 A
  11.        echo $i . '<br>';# x" L  F9 }' Q/ F0 f0 R
  12.     }
    + `4 F% m* Q6 D$ C5 W4 u
  13.     $i++;* x) Q) K3 Z! s8 X) a, @
  14. }
    4 B/ n3 G1 a" P
  15. exit;; t' ?1 X- P+ ^! p3 J

  16. : _& t8 ]; d6 D5 H9 A- s  p. m. |
  17. echo'这里不输出';
    ( ~2 y3 a" Q. n! T+ R' y8 @: o+ a
  18. ?>" C) n* g- T, ^9 T  ~
  19. 5 w* I0 o5 J" ~1 @' F
  20. 结果:
    & Y3 w2 ~: G6 |9 {

  21. 9 r( ?' w- {) h* ^8 e. T
  22. 18 {+ ]# X3 ]9 A4 R& S
  23. 3
    0 a- C7 g; C4 U- P4 b! B
  24. 4
复制代码
continue
- f# f4 z8 ?' [
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php
    # P+ s* m6 H4 C" E* N; z9 C
  2. for($i = 1;$i <= 100; $i++ ){
    . q, C2 m9 k5 S- \' J) l, t
  3. if($i % 3 == 0 || $i % 7 == 0){3 ]! f% `/ a5 d* x7 H3 f4 B' t9 ]
  4. continue;* \5 v5 Z; g/ T7 y
  5. }+ d/ e$ T. W8 Q5 e+ j% @
  6. & #160;  else{" @8 l( x9 x  K' Q; P' D; k* ~
  7. echo”$i \n<br/>”;0 C: h/ U9 O. \: G' v
  8. }9 }8 X1 Q, A# m* a$ H
  9. }. ]4 s7 F' W( v0 [' ~
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){
    ! i# [. T2 \# \& T$ ~9 d& J8 U5 c1 J. D
  2.     for($j = 1;$j <= 10;$j++){
    9 Y& D: J  g" v0 w1 y: G
  3.         $m = $i * $i + $j * $j;6 R. w! S/ Z/ E* F) X
  4.         echo”$m \n<br/>”;  \1 a% C0 {- o6 r0 b
  5.         if($m < 90 || $m > 190) {/ Z6 e) D  |' j  [7 M8 E6 h* T. W
  6.             break 2;* ]2 v& o  u8 e  S4 I2 D
  7.        }  }) A+ v' Q0 ?7 \& U
  8.     }
    / `. x6 G3 i( p
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。0 Q) |# K4 [. _% a! U2 T  n& N. n
下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){" N+ X; s% d8 S# M2 ]7 G
  2.     if( sqrt($i) <= 29){, R( p$ M0 a* J  _0 |6 s
  3.         goto a;
    # }" \2 a0 ~6 q9 `
  4.     }
    6 b6 P, t  S# s. g% q3 j, [3 L
  5.     echo “$i”;
    8 t$ W5 E( r) `0 y+ ^
  6. }; P) B$ G' k% S9 B- T8 D. F
  7. a:' ]/ |! _5 ~( n7 @
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php- T, S, v$ `! i  @5 G% i$ u
  2.     for($i = 1000;$i >= 1 ; $i– ){
    4 b- z( \  M; }. g; @3 i  A  i
  3.         if( sqrt($i) >= 29){
    6 r; P6 a3 U6 n( q4 t9 K( F
  4.             echo”$i \n<br/>”;" k/ @5 H# s2 n) R' w# e1 ?
  5.         }' ?. }0 e9 `# o9 `- ~
  6.         else{
    ) d0 [* n: W' K9 ^2 e% F/ y
  7.             exit;, q$ V) ^1 }8 o, Y6 y2 C; d
  8.         }  i- ^" e/ e& @5 B7 w1 J% |
  9.     }
    3 [: _$ F* F; T7 z, Q: h
  10.     echo”本行将不会被输出”;
    3 D. _6 t3 r) h  H# I' [' b: @# N0 c
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php: g  l. |* E1 w2 e* E
  2.     for($i = 1000;$i >= 1 ; $i– ){
    6 @! x8 G  B2 L
  3.         if( sqrt($i) >= 29){8 u: O2 S9 ]8 b: H5 h/ R7 r& r+ D
  4.             echo”$i \n<br/>”;1 [! R, G3 z+ ]1 R- D+ |( c
  5.         }
    2 ]- F+ `' G" c% |1 ~8 w
  6.         else{
    : T* ]; g* K; n! b. A9 E
  7.            return;
    * k' P8 b( K% ?% x; s
  8.         }# i& Y+ ?$ y1 T. R6 t; e0 t
  9.     }
    & M: \! b' d# {4 e
  10.     echo”本行将不会被输出”;
    - {8 W: e# X& J6 S  P, ~
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;1 Q3 i7 m6 w2 U7 B0 A# f& p
  2. $s=1;0 M- U4 o# x: r( g7 e2 x0 u1 K# ~6 o
  3. while($i==0)
    8 ]& A2 ?  X% B4 s, [
  4. {" X# i& o8 }7 x$ Q: E* s& Q
  5.         if($s==1)
    # }  Y9 G7 S+ @% d3 G, C
  6.         {( ^9 S' Y5 T% h/ m& l
  7.                 $v=8;
    ( n5 Z. }+ ?% X: B
  8.                 break;
    ; s: U2 ?. g7 A0 D7 l" T
  9.         }( t0 Y, e2 E, U) b! C3 z
  10.         $v=9;
    : L0 }( s* V6 m8 T. ]
  11. }" t. J8 @3 I# j" z: P3 C  V
  12. 7 O* M, G' S/ u" @9 e& B; ]
  13. echo $v;
复制代码

8 Z0 L. g4 Z- h2 J# d) q0 K. {" y3 N9 ?! n; K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 08:12 , Processed in 0.054276 second(s), 19 queries .

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