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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-11 11:13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:( I$ G9 h) S( q; z; J/ ^
  1. <?php
    9 W" J# _* E) l4 d

  2. 8 x; B; W. L- a. n, ?9 ^" E
  3. $i = 1;
    5 m5 }* P% V9 P* }2 H
  4. while (true) { // 这里看上去这个循环会一直执行
    0 v1 U  ^! S0 r9 k5 }; v8 K' T
  5.     if ($i==2){// 2跳过不显示+ V: t5 r3 }1 B* @- B8 B2 h9 e
  6.        $i++;
    5 \4 u5 g) ?3 C" w9 [8 i- n+ [* P8 c
  7.        continue;" L9 p' ]. W' W
  8.     } else if($i==5) {// 但到这里$i=5就跳出循循环了; @5 O- S$ E$ T& x
  9.        break;3 Z( v  }( v; d
  10.     } else{
    6 D" K/ a4 d* q5 F# m8 J7 s# y
  11.        echo $i . '<br>';
    3 }8 o! _% ]) l4 X3 h
  12.     }
    ' X# A9 ]+ P% f  ]9 H
  13.     $i++;/ ~8 O+ R2 A& Q1 @8 P& Z) o/ e& q
  14. }
    $ ?" H' X+ W% V7 X
  15. exit;! _, v( {* K4 z
  16. / A$ z& H% q1 B& ]( _
  17. echo'这里不输出';4 K" {2 P9 [# Z- z( b! S
  18. ?>
    ) E# z, {/ Z7 ?* s2 z9 o

  19. 7 u- |# o7 q% m+ q2 e
  20. 结果:
    6 C/ c  V9 [  i& X$ D8 A
  21. : n2 i  A  ?9 D0 z$ {
  22. 1/ L: u4 B( N4 B- j1 z2 c
  23. 3
    0 c0 c1 Z: K+ w2 k- r
  24. 4
复制代码
continue
' }- X6 R0 I8 E, h
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
  1. <?php
    / N" c6 Z: G$ F( P
  2. for($i = 1;$i <= 100; $i++ ){
    6 u( }  O" D) m4 H% j4 }/ i3 |
  3. if($i % 3 == 0 || $i % 7 == 0){
    * b% n/ P: i1 P4 i  Y1 N( _4 o
  4. continue;
    9 I8 B$ L4 E0 N' e, k" k
  5. }# a! |* [' F+ Q: t
  6. & #160;  else{
    5 c, m% h, s) F7 N9 ^
  7. echo”$i \n<br/>”;9 g1 J1 ~) g: @& w& i  k5 g
  8. }3 }' p, u4 E* ^' G# h6 G6 v# D
  9. }
    ' @; q: j- m; E  {
  10. ?>
复制代码
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
  1. for($i = 1;$i <= 10; $i++ ){
    9 o4 C$ T% I) S9 d8 P
  2.     for($j = 1;$j <= 10;$j++){( p' k- b4 y. f, {5 P- }  `( w
  3.         $m = $i * $i + $j * $j;* W, ~8 @- z  f2 D, [) m2 e
  4.         echo”$m \n<br/>”;
    + z+ M- _4 l7 v% }/ I& `6 L8 M
  5.         if($m < 90 || $m > 190) {
    0 j" n, t& l' E& G
  6.             break 2;
    4 H, t, Z% {2 k
  7.        }
    7 `# z$ J7 D; e7 r8 ~6 w
  8.     }
    " [" H; b  m7 H2 ^  I3 z; c. ?% a0 G
  9. }
复制代码
这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。, a; D6 c  Z+ t6 t9 G- o9 Q; F* S# l
下面的是一个使用了goto跳出循环的例子
  1. for($i = 1000;$i >= 1 ; $i– ){
    % b, R6 `* _8 \0 R& [
  2.     if( sqrt($i) <= 29){
    0 G3 l4 J; ]. I3 [
  3.         goto a;
    + R7 f- [$ Y& q
  4.     }/ z7 `4 P" ^5 W& d& o3 f4 R* M
  5.     echo “$i”;
    1 p4 W. }1 @* o6 T
  6. }
    ; j# j$ w4 L' k( H$ K
  7. a:
      U  I( m" m! E8 K; H  I( _, V! l. ~
  8. echo” this is the end”;
复制代码
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
  1. <?php" z8 j# `% c& N& l( n% l' Z
  2.     for($i = 1000;$i >= 1 ; $i– ){
    : f% W  P$ [! p# k
  3.         if( sqrt($i) >= 29){
    2 L* Q; W1 m% E3 O4 `
  4.             echo”$i \n<br/>”;$ a# G! B: Y+ O" O, S& o) r8 J2 C
  5.         }
    % g4 x8 r3 S) c3 Z. M  g
  6.         else{
    5 X* p$ Q$ M+ w8 @7 r  f
  7.             exit;
    & J! ]' A# l4 F' l% h0 P7 G$ z) `
  8.         }
    " y# ^3 t3 z- E, A6 A0 D0 ~
  9.     }3 {. Q% {) S7 U
  10.     echo”本行将不会被输出”;
    ; s$ D7 ]5 z: I/ E. \& @: ?3 ]
  11. ?>
复制代码
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。
return
return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行
  1. <?php
    ' ^+ N. \# t* x/ B+ h1 R
  2.     for($i = 1000;$i >= 1 ; $i– ){+ i' ^7 D7 e" E, |
  3.         if( sqrt($i) >= 29){
    3 k; g2 ^/ Y6 n1 L: f
  4.             echo”$i \n<br/>”;
    ' K& [3 @' b3 Q: L
  5.         }
    . @6 M" t* P% X: k/ \9 L
  6.         else{
    * h! ~' H. B/ V5 ^
  7.            return;
    & }* d" p. i% r* S; A
  8.         }/ i1 \& V4 Y. Q( J0 M
  9.     }6 {# C  O- U; S- U0 V
  10.     echo”本行将不会被输出”;) K  {6 u8 p. M
  11. ?>
复制代码
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。
if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中
  1. $i=0;, _& O1 a3 r8 \
  2. $s=1;- _) V9 @1 k% v) C
  3. while($i==0)' O$ [3 Y3 j" m. j
  4. {8 A# b7 w8 {& M
  5.         if($s==1)6 V7 Z0 P6 d; M
  6.         {
    9 K/ i2 _7 B+ t" _# B' x& T' t
  7.                 $v=8;" u* L8 O# v  ~) y* J& ~0 \
  8.                 break;: v& ?9 Y/ J) o" |9 |) T
  9.         }4 y1 Y  j2 M% S6 r* D" \# P
  10.         $v=9;
    2 K2 ^$ E9 u& b5 G+ L
  11. }
    & ^  d' z& C) U, M0 }1 O% `4 I
  12. & C$ @3 a! B2 p7 q6 U6 A2 L
  13. echo $v;
复制代码

4 x8 K6 s# U7 s  z- L8 X4 m( ?! J* N8 ]* f. m8 c* P+ {* J/ a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 01:33 , Processed in 0.117400 second(s), 19 queries .

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