PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
- u4 s4 v9 I" K: e- <?php
0 o5 F* B. d" K' r9 y3 {/ b9 N2 M -
( s+ X# t6 t; ?/ w+ U4 c s1 K$ A - $i = 1;
3 W7 u k+ Q) e6 L6 [* c - while (true) { // 这里看上去这个循环会一直执行9 I2 k0 y3 B$ S1 E
- if ($i==2){// 2跳过不显示6 {7 u: {2 K. A5 S; O
- $i++;$ {9 o6 J: P! P6 f& \5 l
- continue;
: R$ J9 ~% L' Y; j8 `) {- g - } else if($i==5) {// 但到这里$i=5就跳出循循环了
0 T. j: Q1 o: G4 n$ v- L - break;
3 x( E1 r. c8 x1 A. p* s8 e - } else{
1 Z2 ^* m6 `& Z$ v% A) y: Y - echo $i . '<br>'; X3 F( s% b' v% w2 b/ w% K5 `
- }7 W P2 T) ~0 H( L* A
- $i++;7 G/ W6 a0 n9 @" c; O4 k3 m& b
- }: ^; Y. A* _! f4 G+ A: T
- exit;7 e* K2 _9 T& I7 x/ d
- 3 D9 }/ {. j3 i( f' b1 c5 ^
- echo'这里不输出';
# N( Y& m7 V9 U! t- d3 ` - ?>
$ K, U! ] }7 ^% i5 } -
5 x8 T9 ~7 q4 n/ P' T- R - 结果:$ J4 E) r6 [) P+ \% J# f
- 3 l, x1 h- @* K- v+ w) Q
- 10 C4 _! y. G8 l h1 U0 p0 m# x/ Z+ g
- 3* r x4 Z5 D. y+ A& x
- 4
复制代码 continue
u3 o" m& v+ }8 Q& k1 P6 dcontinue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php( W) P1 o9 l1 p- P( B4 `
- for($i = 1;$i <= 100; $i++ ){
/ Y$ \6 y5 O* k _9 a, c - if($i % 3 == 0 || $i % 7 == 0){; U' q2 X, v( C+ @9 u7 Z7 }
- continue;
1 I8 x2 S6 J. p9 O - }
. A" c) ~) a! S, \% v6 F- V& d - & #160; else{- w8 X9 U6 M/ [& G7 S y% X
- echo”$i \n<br/>”;/ I6 Z3 B0 j C9 P" V# R! W4 |
- }
1 r! a+ f5 g7 v A, _6 m$ k! m - }
% `2 d3 U2 E& }8 i. k - ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
8 V% K2 m {' i z6 h$ F8 L* T - for($j = 1;$j <= 10;$j++){
# k. F0 C4 X$ i2 s: X - $m = $i * $i + $j * $j;
! @* q8 C# ?# |: @7 ~5 e - echo”$m \n<br/>”;
( ^; ?) X, q) O( E/ y" C n - if($m < 90 || $m > 190) {! a8 R; x2 e3 j; d7 J; e5 V
- break 2;
# P& r+ D( D: F5 A% K9 E - }
4 K; t4 a! C- B4 s - }
* k( K% k3 v( L3 { l! s1 U - }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
c/ h3 B( u. \( y# b下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){8 _! g& e! c, S8 X/ ~
- if( sqrt($i) <= 29){
3 B; s/ k a8 \1 y, ? - goto a; F, S1 X/ j" b. t/ }
- }
8 @5 W6 {9 M5 k5 K- v$ C5 M6 M; { - echo “$i”;
2 T: b8 [6 S N% Y6 w5 u - }
0 r/ Z4 g [# r% }9 G0 v! O - a:
h0 V$ k. R) e: a1 w - echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php
* J, v. y7 Z1 ?& x+ Y. N: A+ b! r. o - for($i = 1000;$i >= 1 ; $i– ){) J0 S0 L6 }* d6 \# O
- if( sqrt($i) >= 29){: s+ h* U1 h( _! {0 M
- echo”$i \n<br/>”;+ u6 w' e. D5 _0 @
- }
& u0 P% T6 J" W( i! k5 x% q3 X - else{5 w7 i' g: S: z$ j4 t& a! `% o
- exit;+ t# E7 k" [8 ?$ P; F$ K2 @
- }- w* X: F$ m5 e' g6 Q( U
- }6 ^7 |% q7 D! T* g, M
- echo”本行将不会被输出”;
( d9 J' `% c: [4 r - ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php) Q* U# z4 ]# C9 r
- for($i = 1000;$i >= 1 ; $i– ){: T4 G0 E1 B& }# K
- if( sqrt($i) >= 29){: r& E4 C% L' t: l. G) B
- echo”$i \n<br/>”;
* J2 Q+ X7 i7 r, ] - }
5 F# a6 m8 l" d - else{- I( P3 {6 V+ i) q9 g
- return;
& K& }2 n/ [" Z$ N& P - }+ T S+ J2 F- K+ Y. X0 D
- }) r' |$ x' S( a
- echo”本行将不会被输出”;
5 c$ {( Y7 w/ S' _0 t% E# K" z+ f - ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;
8 ]! S, l; ~6 c2 Q: F - $s=1;
0 D7 N/ X% H7 Q" W- W - while($i==0)" ]7 t4 F0 A( O+ i: F
- {
- R; _1 T3 }8 C% T6 s4 z - if($s==1)' y% _; ]% D5 P9 H
- {
% Q8 k% }9 v1 z( N4 L - $v=8;" g4 l. @8 I. Z1 x* B
- break;/ A, ?5 \2 u# U' @
- }
" f- c7 Q$ F$ c8 d4 {0 k - $v=9;
$ m: }; v4 x; Q8 H - }) d! D9 c# h1 B. _+ j& U# w
-
9 [+ C2 p8 b2 U. Z( z1 ~5 m - echo $v;
复制代码
) f4 K" Q9 {2 K! L$ q) |6 V {+ I h7 p5 [) C7 h, T5 G3 J3 E6 R% ~# U
|