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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-11 11:13:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
; _& J) B" s" d
  1. <?php
    3 o" I+ e5 ^" R1 i- U  |( E

  2. ' x+ }& {, V9 F0 s4 g) q8 x
  3. $i = 1;6 o, I4 o$ ~* D( F/ Y
  4. while (true) { // 这里看上去这个循环会一直执行1 g: J' i. i- Q
  5.     if ($i==2){// 2跳过不显示* I. _, Y" w& M+ K
  6.        $i++;
    . \2 H# D; p2 J# p: ~* i1 d# |9 m+ y
  7.        continue;
    9 d; K  D/ J# r/ U
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了
    5 K2 h. O/ n+ J' o
  9.        break;
    ! M" R: i& `5 Y
  10.     } else{
    - ?- \  k7 l2 I; R+ ^) ~$ Q
  11.        echo $i . '<br>';
    . M5 B) V. o  y2 z. H" a6 s; {
  12.     }
    : i+ a4 X) i5 V2 [0 H" L& N. m' F/ a
  13.     $i++;
      G1 Q, ~5 f% [
  14. }7 m5 l: [- p5 o3 Z' H7 i
  15. exit;
    ' a: M# ~* ?# w4 I& n3 A
  16. 7 x5 ?+ {1 n  W& c
  17. echo'这里不输出';
    ' I, }8 |1 C% D1 ]( h% s
  18. ?>
    & ~+ o9 I5 m7 r, K' e. l  M
  19. 5 `7 R- N7 J, |
  20. 结果:
    - b/ [' w9 S' x7 e! p* i

  21. ! T% ?) E0 a0 a: w& {" Y
  22. 1; _! E+ T8 Q! ~( K: h
  23. 39 D5 p' u0 W( N, g) v+ w, Q2 S3 G
  24. 4
复制代码
continue: ?: y' k5 d# v6 E
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php) D) i' t7 g8 t9 c
  2. for($i = 1;$i <= 100; $i++ ){+ {$ L5 X- b0 V" E, ?6 ^& ?
  3. if($i % 3 == 0 || $i % 7 == 0){
    0 d1 b& M0 [; E: k! K. H0 j4 {7 V
  4. continue;: w! h' l; U$ N/ X8 V) i  e
  5. }
    * P& Y2 R: `9 {  f0 X& @' W
  6. & #160;  else{
    ) x1 r+ d1 y6 {  a' U: d/ P) X
  7. echo”$i \n<br/>”;
    / A" q- R/ f+ h) N# H
  8. }# k# W- f, j( V+ R; O9 c
  9. }4 F2 H: ]7 t1 x( }+ n2 b& e# e  X
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){
    9 t) C1 g/ R) I
  2.     for($j = 1;$j <= 10;$j++){" q0 m& u0 M9 N
  3.         $m = $i * $i + $j * $j;6 J/ d  _/ d6 r& y9 F6 p& @
  4.         echo”$m \n<br/>”;
    * _% Q7 _$ \: p$ J! x
  5.         if($m < 90 || $m > 190) {
    7 a* T; {( Q& U
  6.             break 2;
    / R9 {1 y& L' c0 W2 Q9 g" f9 I
  7.        }
    ( k$ F+ l; H. w$ F, S& R$ x
  8.     }
    * M' x1 ]. q) g
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
: f( F7 k8 w( w下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){$ k- j* r7 Y; ]1 ~. |3 {
  2.     if( sqrt($i) <= 29){8 v4 a" i3 e4 }  \
  3.         goto a;/ Y( ~; H6 |$ R7 l0 H' O
  4.     }; p8 E/ J4 n1 ^( i2 [( o, d
  5.     echo “$i”;
    9 P/ X* `- V9 F. k# t
  6. }5 h8 Y' m* R0 t
  7. a:
    % O0 g0 n: o! J8 ]
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php1 W& U. U! K# K" ~: r
  2.     for($i = 1000;$i >= 1 ; $i– ){, k" n  E  u5 s3 {& I% H
  3.         if( sqrt($i) >= 29){
    7 H" ~$ B; `3 ~4 {8 T
  4.             echo”$i \n<br/>”;
    6 w' U! l" F; t8 H, o$ W2 k
  5.         }
    % _6 ~' ?- \8 C( ]/ J" w3 B
  6.         else{# U! F) m+ b' s8 [
  7.             exit;1 H# G$ B8 B$ K3 O9 ?% _$ r# ]
  8.         }4 W/ M* _" Z( P# d* v" O: e
  9.     }
    " K, q& p: G- U8 a9 @
  10.     echo”本行将不会被输出”;/ J: o7 M/ p5 K# k
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php; o- y1 N' f" E2 |! S) r
  2.     for($i = 1000;$i >= 1 ; $i– ){9 s. q6 r0 t9 e3 O
  3.         if( sqrt($i) >= 29){
    9 L( {* x) T9 ]# u+ @' S. }
  4.             echo”$i \n<br/>”;
    - ?1 X" a( n0 `% B- i  Z! A
  5.         }
    ) q% d; ^8 `( x. G" |
  6.         else{
    $ U* `. L0 L  q+ A, ~# {
  7.            return;
    + r/ V4 Y" g! I5 l
  8.         }& W, L+ J" {  b. ~
  9.     }" c* ^$ z' n0 s* [( y$ V: z2 q7 k* ?
  10.     echo”本行将不会被输出”;
    ( E+ D% @, [; k0 V& ^8 K8 `) \9 K- ]
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;
    7 n9 ]2 h  y6 i' R
  2. $s=1;9 y4 C+ V) ?( F4 ^" B! {
  3. while($i==0)
    ) T  `! ?0 C' Q+ M
  4. {
      T5 J2 u6 F3 k4 p
  5.         if($s==1)
    : c- F& C0 b/ b" r# O& Z
  6.         {
    $ I/ N* B' r- V3 Y! j  u% L
  7.                 $v=8;
      h  |% I7 y; t  @3 w
  8.                 break;
    % ?# Y  M: @, W3 S
  9.         }
    2 s) e! w# S) Z  I2 Z
  10.         $v=9;
    ) p1 E+ o- v; O0 V5 F
  11. }+ W& l: F$ A+ u

  12. 5 [0 O: @7 K/ ^9 O: L" k% G3 p
  13. echo $v;
复制代码

) U2 e3 z: `: L3 E: g' d# }2 k: r/ A: E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 18:37 , Processed in 0.105903 second(s), 20 queries .

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