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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-11 11:13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
* A3 z' I! _( I- ]
  1. <?php
    ! `0 ]/ s: f* w% ]6 U8 x$ V
  2. ( H: W- f2 j3 c! M7 @' }
  3. $i = 1;; ]7 A5 r# b: V, b
  4. while (true) { // 这里看上去这个循环会一直执行
    * {  H2 p3 D  p' j
  5.     if ($i==2){// 2跳过不显示
    % ^- W7 K. T  \8 m( c1 t
  6.        $i++;& Z! b) m3 [: t% o6 Y: j' G
  7.        continue;# t* v- Y4 n+ e2 B0 G* `
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了" n) h" C$ H2 i) O. f; @0 M" R
  9.        break;5 s; d- I2 F/ p+ K, M) ~( w2 v
  10.     } else{
    ! }, [0 V: u' |7 h# \; A' |
  11.        echo $i . '<br>';# ^/ @) }* L: N
  12.     }
    . F  f1 W5 }7 T) t+ ?' z' _9 M
  13.     $i++;
    4 k  m! o0 S6 b5 p6 J, q
  14. }
    4 s  G' e6 H9 s8 n( ~, ]
  15. exit;
    & ^3 j' x; p: O$ S$ E: R1 D
  16. - K, G- v+ @$ _) ~
  17. echo'这里不输出';6 s. Y& D8 v  @9 i; I
  18. ?>
    # L' v! v6 w. j3 G: Z$ b

  19. / V5 u# |* K3 ~* `1 E% ?
  20. 结果:* h6 @$ z" u1 ?1 y
  21. : w+ W( m# b3 M$ _
  22. 1
    0 Y4 c  p& p0 r9 p1 g
  23. 3( t- A1 l: E3 l+ x* }2 h/ C
  24. 4
复制代码
continue
8 p/ f% X7 K" q% F# [- N% g
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php: d8 Y6 \% C1 l  Z
  2. for($i = 1;$i <= 100; $i++ ){
    * g. N4 c' [1 b3 R2 r
  3. if($i % 3 == 0 || $i % 7 == 0){3 o$ f, [7 ?+ g- F$ c
  4. continue;
    2 O# n! p8 R, j
  5. }
    7 E$ P( ]) i2 Q  i& x2 ]
  6. & #160;  else{2 k2 R3 q, Q+ ]6 }
  7. echo”$i \n<br/>”;( o$ s- _! o2 n! w- n; E" k( f+ Z- U
  8. }
    ) d" L  o/ a  }, y$ s" K# B5 i
  9. }2 ~8 f) A' ]% Y5 g* ~' L, ~9 k( H
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){
    0 G( e6 x1 O. v" E9 k! V1 w* i
  2.     for($j = 1;$j <= 10;$j++){
      C/ [4 T8 Q* M, h
  3.         $m = $i * $i + $j * $j;' E; e- H0 L3 R0 v& m
  4.         echo”$m \n<br/>”;
    2 W! B$ K  Z; b( {& [; R' u; M
  5.         if($m < 90 || $m > 190) {( S8 L3 D  o- Y$ S- C$ s+ B
  6.             break 2;. @8 E$ N* t& \0 U6 L$ L
  7.        }
      Y  u9 F% z& H' `9 Z$ y  I
  8.     }
    1 x: L6 \  B! H. R0 T2 V
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
4 c$ j1 E0 f' e8 ^! E$ \下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){
    - ]5 n$ v/ [! y8 e
  2.     if( sqrt($i) <= 29){* e1 l" ^0 Z& p( j
  3.         goto a;
    8 ^. s2 O% i- n* v/ V
  4.     }  d9 c( i9 C/ [% d, D1 F7 \% m5 k
  5.     echo “$i”;# S6 a' O/ J5 V, k
  6. }5 ?* P4 W# o6 Y& f
  7. a:7 I+ t7 w: q( }- {* O  X4 k' ]
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php* r& Z0 F, ^: T% `( D* z, v
  2.     for($i = 1000;$i >= 1 ; $i– ){: C- e0 P# n4 J% Q$ g, N1 d
  3.         if( sqrt($i) >= 29){- j9 M% O* i' T* f. G, J
  4.             echo”$i \n<br/>”;
    $ L# {0 b5 E% j
  5.         }
    0 R1 b4 m! H' l$ ?
  6.         else{8 s) o1 X, u  ~6 c
  7.             exit;
    0 ]1 _' Y- _- q% B  `3 T
  8.         }- R& L3 C2 E7 E
  9.     }# C) q0 V2 A% n/ Y$ K+ k. T
  10.     echo”本行将不会被输出”;3 |! j; w' r7 B- s
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php- t2 G. W) e3 K) V' G/ D
  2.     for($i = 1000;$i >= 1 ; $i– ){
    7 t0 [3 W4 |$ I; O9 ]( Z# j: X
  3.         if( sqrt($i) >= 29){8 K. C2 a2 R6 g4 o7 }  h" {
  4.             echo”$i \n<br/>”;1 D$ x2 r* T  B. e: ?; V
  5.         }* y  v( j4 B3 ?4 g2 I* x
  6.         else{' y) }5 X, c! a) L
  7.            return;
    ( R5 L; Z% i2 G; V* R$ B9 `, c  s
  8.         }
    - K3 A" f: t" m  K
  9.     }
    ' r# M3 @" h$ @* Z# r
  10.     echo”本行将不会被输出”;
    ; G5 U) h/ D! F! z6 e5 l8 B
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;6 h' _* D9 x& C* {+ l  o
  2. $s=1;
    : y! V( f3 {4 m+ O# O% S9 P
  3. while($i==0)
    - Y$ Q( \$ ~, o" _& q# Q" z0 h7 K. [! X
  4. {. g: [. w- Q6 Y$ V2 F" ]
  5.         if($s==1)7 V$ o% G  O% s+ L
  6.         {& b! l- h1 V4 ]/ x! [3 D
  7.                 $v=8;8 g* l: F% W% I  r4 v
  8.                 break;
    ) e9 X+ o' O6 A" B! V
  9.         }
    " T- Q$ W5 q/ y  _7 D5 V  {
  10.         $v=9;5 Z- Z) n7 `0 Z& x
  11. }. J* S/ i6 L( y% Y0 k- [" f) E

  12. & v2 r/ ~# U- ?+ ?3 p6 G6 x& w, _
  13. echo $v;
复制代码

/ Q9 l" X- N0 h
3 B; {$ x4 ?4 d& P. W2 V* V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 21:46 , Processed in 0.066586 second(s), 20 queries .

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