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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-11 11:13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
* d' T9 M1 S- t4 I/ M" P/ h3 Q- `0 a
  1. <?php, f1 \" a9 U4 Q( O

  2. 0 d9 B' N" Z( W, L' j
  3. $i = 1;6 M- ^" V# a. h* s) P. O) L
  4. while (true) { // 这里看上去这个循环会一直执行
    . C; e4 j9 w5 m2 ?9 F, [
  5.     if ($i==2){// 2跳过不显示8 s) b3 Y, X7 N2 p
  6.        $i++;+ z* U8 U0 g3 s9 |
  7.        continue;( o" }* E4 Y! u) W
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了
    ( C* b  J: Y- z* n" m
  9.        break;4 m* Q3 o/ z, S- G1 G
  10.     } else{
    . l) Q7 A, P) ]; z
  11.        echo $i . '<br>';
    ' b1 o8 d/ f' q! G
  12.     }
    6 Z' `- z( O- D' C8 `# q6 w
  13.     $i++;
    ! l; n* Q& m* Q" C2 u$ h% p
  14. }
    " c8 P2 i7 O/ @  @# I9 W* |
  15. exit;
    0 f7 w1 J% k  J! U  j

  16. ! [4 s* ~  B: R/ t7 t. b( e
  17. echo'这里不输出';" }/ P9 u$ d/ Z  G
  18. ?>3 G. r! P" j: H& j  p- {. y, _) m

  19. * y( L7 v8 F, x- W" S. M; Z; S9 V
  20. 结果:) \6 b* a; m- x

  21. 8 d8 g: q4 j0 Z5 d! h" H$ S+ p  [
  22. 1# w6 x% o+ r1 H$ X3 ]
  23. 3  O" S4 K$ E; ?1 X% c
  24. 4
复制代码
continue
! H. G; T' Z' a, P) O1 z
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php
    % j  Y* A8 d' m& w  w  M! i5 Y
  2. for($i = 1;$i <= 100; $i++ ){5 @% T0 ?" q# I6 |
  3. if($i % 3 == 0 || $i % 7 == 0){
    % x* ?& F+ }( @
  4. continue;: @+ I6 i! g6 k/ ~' |* S7 _0 J" Y
  5. }
    8 a! s' }. u% Q& M
  6. & #160;  else{9 o4 i9 r/ D1 s0 K, b
  7. echo”$i \n<br/>”;
    7 K; U2 }' c0 `" g6 _9 t
  8. }
    $ S7 O& {( K8 c0 A0 U
  9. }
    6 p' r, F; ]# N5 w$ n/ `- ]) b
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){
    ! H7 n4 P% K: I3 ]
  2.     for($j = 1;$j <= 10;$j++){
    $ X/ ^/ Z, M, h: J4 _
  3.         $m = $i * $i + $j * $j;2 {, e$ t  x3 u9 v. Q- `& l
  4.         echo”$m \n<br/>”;: L* h! G' A4 b& d, Q% q5 {9 }+ E
  5.         if($m < 90 || $m > 190) {# V8 I  u* g) A/ `  v) B+ E
  6.             break 2;
    1 ]  `( {. g& A% t0 W2 Q& C
  7.        }
    / k5 Q$ _4 V8 \! Y4 B
  8.     }4 Z. c: S8 v( ^+ U# u
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。$ g. |' E5 D& k& K5 D- C
下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){, E& K2 P% k% j5 D
  2.     if( sqrt($i) <= 29){
    & k% b1 h& U+ [( u
  3.         goto a;
      T) u- p. `: p3 V8 l" d. W% d2 r
  4.     }
    : g) V5 @% {5 |: s+ i$ k4 |9 P0 ~
  5.     echo “$i”;
    , X9 \* {; ]. a2 S
  6. }# h3 f7 E1 Q, H
  7. a:- S5 ?, K: \9 t" _# A' U
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php
    . Q  y; j% S$ ?  s- ^
  2.     for($i = 1000;$i >= 1 ; $i– ){2 M$ G. V) @* J  z5 {1 `
  3.         if( sqrt($i) >= 29){
    1 |  S  I  h% j+ T' k6 B' q9 }
  4.             echo”$i \n<br/>”;
    1 T1 q4 N8 x# E; m. _
  5.         }0 y! S) K6 G# j1 W3 v- r2 a8 _! R
  6.         else{/ ], k& O3 C+ u" ^
  7.             exit;
    # W4 D; L& H% Y- [2 |
  8.         }
    0 }0 A2 `# C, l
  9.     }! S( S6 J* y) u2 k5 _
  10.     echo”本行将不会被输出”;$ w- U+ e8 h3 O* |/ B# m2 S
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php( x1 s2 ^/ h1 `4 }! i
  2.     for($i = 1000;$i >= 1 ; $i– ){
    % X' A6 p3 I/ x; |) b6 h9 h, O/ Z4 W
  3.         if( sqrt($i) >= 29){
    . v) p0 l  B  `* Z. _
  4.             echo”$i \n<br/>”;
    & }# U3 p& L" ]$ E6 C
  5.         }
    ) ]) z: C( Y! c7 L  Y6 |% P4 X6 p
  6.         else{
    , c: Y0 `' l5 r) g
  7.            return;
    9 R9 g( Z7 m/ k5 B
  8.         }
    $ b& R% y/ ?8 T
  9.     }
    ( |5 o" d7 b! x4 W
  10.     echo”本行将不会被输出”;; T! ]+ y. E9 p4 b
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;" Q5 ]/ c, R/ ]2 F( y, b3 o3 u
  2. $s=1;
    ) `3 L; t2 u. H9 c4 h* o: t/ J
  3. while($i==0)9 N3 I4 }. {- U6 Q- X/ o2 u/ o
  4. {
    # h- W0 W+ V4 Y* s4 O
  5.         if($s==1)+ \$ Z! b4 y5 {0 P+ v0 F1 e
  6.         {1 f0 t+ @* w2 e; C5 b7 i- B
  7.                 $v=8;
    . w) m) i7 [% }% i5 F' l+ {
  8.                 break;
    / M$ g; h+ u5 h8 w( y5 G' O6 U; T1 W
  9.         }
    - ^% P1 P) A  S9 B0 @$ ^; b$ U! ?
  10.         $v=9;% [1 k$ H+ K5 H4 F. q
  11. }( ?0 }" L; k6 U& e
  12.   Y; g# B( H3 e
  13. echo $v;
复制代码

* N9 v- }1 c1 ^; ~6 l
0 C7 H9 B( K8 J' l2 o3 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 17:33 , Processed in 0.109566 second(s), 21 queries .

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