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