cncml手绘网

标题: PHP跳出循环的方法及continue、break、exit的区别 [打印本页]

作者: admin    时间: 2019-4-11 11:13
标题: PHP跳出循环的方法及continue、break、exit的区别
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
8 J! ]9 E+ g% M9 Z  m% f
  1. <?php
    6 `9 e3 M0 f7 u- A9 E
  2. ; _) B! [7 b3 l/ w9 _
  3. $i = 1;7 J/ O9 Q4 P) L* P% b" c7 J1 \* {+ q# J
  4. while (true) { // 这里看上去这个循环会一直执行6 _9 X; R8 T" }. B& f! H: g+ R
  5.     if ($i==2){// 2跳过不显示
    7 @. s: r# _8 g8 y
  6.        $i++;/ o5 D1 B0 Y% o; K5 U
  7.        continue;
    5 t0 K. z+ q( v4 _# U5 S' ~, \( n
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了
    ; l, x9 P8 L6 Z+ b& ~* M9 c! \
  9.        break;
    " b$ q! t) w/ p+ ~* ]
  10.     } else{  k+ a, w- z& k- a# G* f
  11.        echo $i . '<br>';
    : }- y' ^! C6 B- f0 Y- o
  12.     }& M8 }& A0 K# C) _, ?! v
  13.     $i++;
    + k% u% \, n; ~2 b- _7 C
  14. }) m( s: \9 M  T; A. S
  15. exit;) z3 i& y0 f' T

  16. # S( p9 A* r. y! z3 U
  17. echo'这里不输出';: K" w8 `1 S* m0 b2 w
  18. ?>
    1 |" C: S* H1 |  n1 u2 L
  19. , A, p$ V" e! M1 }7 s2 P
  20. 结果:
    # h" F( ~, _# r* P
  21. + Z# p9 O4 B, @& b
  22. 19 ~! k4 W$ B* u( T/ n
  23. 3
    ! b& D& n( o6 ~. x1 G( o$ d& H+ P
  24. 4
复制代码
continue0 `; u3 O: ]+ R
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php6 v$ t0 G& v: r8 d
  2. for($i = 1;$i <= 100; $i++ ){
    5 F& F, ]* [: o: s/ d" d: p
  3. if($i % 3 == 0 || $i % 7 == 0){8 R) c: @( d3 q' W) p7 g2 ]
  4. continue;
    8 E, k4 m9 t0 z5 }
  5. }* ^  D$ _0 S5 M/ {7 d
  6. & #160;  else{" M; j( d0 |- ]
  7. echo”$i \n<br/>”;
    ! n6 a3 c6 n. P! C
  8. }& H+ a9 W: N- i  R! k
  9. }
    5 H4 ^6 \) R6 w" i2 _" M% F
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){( ?# Y0 V: t" m3 ^8 D7 x) {2 I2 @, q
  2.     for($j = 1;$j <= 10;$j++){
    0 l5 O% T1 \; J. |- H6 q% l! v
  3.         $m = $i * $i + $j * $j;/ `% ~1 j5 W# z! P; s
  4.         echo”$m \n<br/>”;- S' A3 E( a$ ?( v: `/ e- ]8 }+ |
  5.         if($m < 90 || $m > 190) {/ [) Z9 i7 W$ R" ~5 h9 J2 y
  6.             break 2;
    4 l4 I4 S; G: E) y/ \& c8 a
  7.        }
    8 C. U6 |% J) }; W
  8.     }5 F) `# c# E- ], M) R
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
: h- R  ^7 u1 }2 V1 p下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){1 L& s6 O6 g9 W$ O9 K- \! J6 _' c
  2.     if( sqrt($i) <= 29){! P. d' G. L" i& X( m4 ~+ B
  3.         goto a;- ^" L3 h* ?9 P8 T, U6 t3 f3 T
  4.     }. k9 o/ d: o  n& V( ?
  5.     echo “$i”;
    6 r1 P, Q0 k7 m3 w, `
  6. }
    & `7 M5 U4 |7 ?1 I
  7. a:
    % ^% b8 D5 e% J: c
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php
    * J" J- Y; U# _5 B" W+ C
  2.     for($i = 1000;$i >= 1 ; $i– ){
    3 Z- g& r9 h  f  F1 i7 v8 Q8 g
  3.         if( sqrt($i) >= 29){
    . \$ O; @5 B$ t# v
  4.             echo”$i \n<br/>”;3 ~5 ~  f2 t' r, W$ U
  5.         }" `& p7 I9 n6 s/ `3 ]  |8 w4 K2 ^
  6.         else{+ E3 f6 l& j/ p" i9 E# J0 W- r
  7.             exit;
    2 s  h  p. ^/ W
  8.         }
    4 x7 {; L. f1 p4 `' ~' j: u2 f0 O9 d
  9.     }
    6 P( I. ^' `7 n5 D3 _
  10.     echo”本行将不会被输出”;
    - W* p- H- h1 ~: J
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php
    / B# v* h3 z. d& c2 x4 \, l. w
  2.     for($i = 1000;$i >= 1 ; $i– ){
    9 z# t: z  t; e) r
  3.         if( sqrt($i) >= 29){
    * h% S. J' I% t# T* j/ M. p* ]# k
  4.             echo”$i \n<br/>”;: G8 i/ o# M) s0 z' W- S1 f. i+ Y. F
  5.         }; i& D  M7 ?6 K
  6.         else{
    0 X6 W" }. N( l; u" i  h
  7.            return;% Q, K" M# c' e2 B3 m
  8.         }! p) S9 O. ]  W* |( n4 l
  9.     }
    + A7 O4 {: {8 J9 Q  ]8 @" g
  10.     echo”本行将不会被输出”;! b9 v% u/ z, `+ H1 |! X
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;0 J1 p3 R9 N7 a1 ?& O. f7 z
  2. $s=1;0 Z8 Y% ]) z4 C" E% S8 x
  3. while($i==0)
    + g3 L+ R) V0 ?$ Q
  4. {2 Z" n/ H" J& }$ P$ S  W+ p
  5.         if($s==1)) |" d7 A% G) U9 F- X, r- K
  6.         {
    8 S: c' C5 W, a/ B8 I) q. p! r
  7.                 $v=8;' h! ?5 O/ P* x0 ~7 [
  8.                 break;
    1 X6 S4 {2 e+ k$ N8 G8 I& v
  9.         }
    3 k6 U  F/ e- z, a
  10.         $v=9;2 k2 M4 b: n* M" L, s: m
  11. }
    4 C; q9 q, ?" N4 E2 a' a# I

  12. + w6 d$ d% ]8 T- i
  13. echo $v;
复制代码
+ X! J, {% {( S+ V$ p6 E! i
" X5 e3 S0 h- C! u8 b, S- |





欢迎光临 cncml手绘网 (http://cncml.com/) Powered by Discuz! X3.2