PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
; g* e2 a% S. u/ e( ?' }* F- <?php9 A2 t* j- p" ]) g* H3 t; d
- 5 f# r* T/ V& @1 o+ k
- $i = 1;8 A0 ?" V" `2 y4 I5 u5 t
- while (true) { // 这里看上去这个循环会一直执行
* d/ k0 n {, U5 E3 W - if ($i==2){// 2跳过不显示7 _$ [: G3 e) @8 v8 [
- $i++;
9 y. U8 L, ~! p! j9 B8 n( h4 L - continue;
5 F- p9 S0 h( I' @- V - } else if($i==5) {// 但到这里$i=5就跳出循循环了/ [3 S5 n6 q9 G) b. I
- break;3 Z4 `: Y9 K- E! Z2 N- b$ p G
- } else{- b. P1 e: @) r3 i: i8 R/ K
- echo $i . '<br>';+ L) ~; G0 Q% O4 x- d, [# {
- }
* n: {/ M7 G! G1 d0 m/ p - $i++;" u4 o4 z% L2 Z1 h* }% S0 G9 B
- }
! E' `# y: s) y - exit;, W8 O2 Q, W8 y# n" p
-
( w1 V' R4 d+ _% R5 T" Y3 _ - echo'这里不输出';6 m; O `& B7 R0 F9 u
- ?>
8 C+ n: ?9 U" v( r - 9 E) I1 a$ f, [3 x
- 结果:
# U/ E6 W( a8 z4 J -
$ Y! u% V! c- a+ W5 g, ~% h - 1
0 K: K- F c, L8 F; P6 n3 R - 3
' l( f0 t$ q# A. w, [* C' z - 4
复制代码 continue
3 |7 Q4 G, ? J$ Vcontinue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php* w" z6 ~$ o& U5 x
- for($i = 1;$i <= 100; $i++ ){
& A8 n! A# b! R5 F) h- s, p - if($i % 3 == 0 || $i % 7 == 0){ ~+ l; K1 h' ]: L% ?0 R& l1 X: i" D# n
- continue;4 A1 \2 d1 p9 z2 K! h4 s$ ?" Z
- }
5 l2 D* `! n3 |. J0 Z - & #160; else{) E6 n" a3 n4 t7 A/ s2 r
- echo”$i \n<br/>”;7 D4 A5 W4 x$ b8 M, ^+ B$ n
- }& X' d) e3 @* j( G+ L9 L
- }, \ d. v T2 u9 e& [ G% x9 [
- ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
a4 j5 _; |5 S1 A% N - for($j = 1;$j <= 10;$j++){
5 }9 Q3 k# u( u) r6 x3 b2 G! |) g - $m = $i * $i + $j * $j;
% M U1 \% q; c. m - echo”$m \n<br/>”;/ g" _1 [+ y. m0 ^( z
- if($m < 90 || $m > 190) {
; c# t9 e, _2 \, h( ^7 [ - break 2;
; W4 A0 e0 L) s' X - }
# |, Z" A3 R9 i/ w8 n/ c - }
+ C2 [3 A8 Z9 V+ M$ x" f H7 j - }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
: X$ E# K; D9 b! N2 S+ t4 ?, J- `下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){% e; y7 _2 u% Z5 J5 Y) w. X
- if( sqrt($i) <= 29){: ~& f( O3 o Y6 l7 L# `
- goto a;7 q l* v8 w5 P) q* k& y) B5 X% a
- } B4 w0 b# j3 Z' z- m
- echo “$i”;* G5 r7 R$ k+ o/ U0 C5 ]4 N
- }
* L) C' T, v& A. h4 |! Q - a:
. s* X# X! g; g+ X0 G" J - echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php
- ^7 Y4 Y: r' o - for($i = 1000;$i >= 1 ; $i– ){. t: F2 M1 j# q# q6 w: a4 s
- if( sqrt($i) >= 29){
/ u3 O! L D; d- O' v - echo”$i \n<br/>”;$ ] G. v @: r. R; a! a
- }
. ]+ b6 l/ H% s* o V: m - else{
/ D+ Q2 _$ Y4 f. B2 x - exit;
1 M6 u5 y: A+ Y. D6 W' v Z - }
5 `. X" \; x( g2 _8 `# U! G - }* b/ {# Z: `, a0 W! y3 _* e" @2 |$ t
- echo”本行将不会被输出”;) s {( K% F: U
- ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php, N. r s8 V8 u0 d; n0 f+ J0 q
- for($i = 1000;$i >= 1 ; $i– ){: P$ Y/ e# w0 @- l
- if( sqrt($i) >= 29){
b8 |* o0 U" o' x - echo”$i \n<br/>”;
: u; X7 Q) `' I: m0 m3 x) v$ A - }
) i9 ]6 Q$ B4 [3 l7 a - else{) X0 s- }8 C% \3 `
- return;: H& o P+ i9 N* U/ }5 M1 w6 V
- }8 ]/ l( ^8 T2 z$ d! ?0 s* p' T6 r
- }: c3 J$ [+ ~$ v6 i
- echo”本行将不会被输出”;
' ? T9 Y# B. U# l5 O5 _ - ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;
' B' z8 c- j' z5 Z& M - $s=1;
3 n- L# S ~# e - while($i==0)
( v0 y9 t$ D y - {
4 a; n0 |9 q) U - if($s==1)
9 z$ J# a' [* S+ t$ b! L1 P - {
1 K# p% R* ^$ k5 u X+ Q w - $v=8;. V% y& c# A- E9 b2 b/ d s
- break;! e5 w/ z# E. k y5 e7 Z
- }3 I+ i, p4 _) c1 a
- $v=9;! t& Q9 C3 l# \" J' j$ k* I
- }
0 H' W3 e2 B* v1 ?2 k& x5 y -
, |7 a7 M# D; N - echo $v;
复制代码
8 I( L9 @* H! W* Y, ?' d9 A7 c
|