PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:5 |! g. O7 b; U4 l3 B6 O( C6 B3 C
- <?php' a! h) C+ s z! | J
- & `+ v4 R5 Q6 i3 l3 ]
- $i = 1;. B3 U8 |" `6 t( v
- while (true) { // 这里看上去这个循环会一直执行
& n$ f# F: V, o! J - if ($i==2){// 2跳过不显示* }+ ^# x7 e# w
- $i++;
; n+ p5 t x8 M0 ] }% K - continue;0 k" F; j1 z1 `9 Z
- } else if($i==5) {// 但到这里$i=5就跳出循循环了! u3 b' ^3 T! G
- break;& }% z/ ~( Q; _) B: W
- } else{ a" j) h2 v& @/ W( P( [
- echo $i . '<br>';
3 r5 ^" g3 l, l0 g! X - }) V: q6 @ W! y! j
- $i++;
j ^ s6 B6 T+ N& s% R - }6 v" |3 U+ C/ g
- exit;
$ H) o) ]6 X0 N1 _" ] - H8 S" Q# @9 s! y+ f3 @
- echo'这里不输出';
. v7 _: R! f$ a" G7 o& x6 w' j - ?>
& y; k5 ?& Z7 g' Q - ; v& N+ x+ U4 f7 z0 A* R7 @6 R# |1 @2 g: J
- 结果:% j- Q; g+ P0 t. H) A1 p
- # k2 k+ J3 m: h- x& Q0 K
- 1
2 j+ j$ R6 v9 a - 3
. W4 B" h. L0 |9 [2 X; H - 4
复制代码 continue
" O7 X J$ q4 h* h2 ~/ o9 V: Bcontinue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php
$ c0 j5 [6 F8 N" ?+ k - for($i = 1;$i <= 100; $i++ ){
% E# D2 x$ l4 p - if($i % 3 == 0 || $i % 7 == 0){( P" B: O# c) d m- ^ v: Q
- continue;- p9 o: p" A" B/ ~& y0 Q- c+ r3 i
- }
8 P( p" v+ G4 G, A# w$ U0 z - & #160; else{
7 d( S1 e; X1 y# y! B& I - echo”$i \n<br/>”;
: n3 n2 ]. c& K- B - }
# z6 `( z( n1 l; A, p- V - }
( f- a. }1 }/ S# } u5 U) \- @ - ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
7 `7 K j/ \. p - for($j = 1;$j <= 10;$j++){" _' t+ G# e% e1 I* F
- $m = $i * $i + $j * $j;( J2 T9 K- H' |! t$ t+ l1 a( x
- echo”$m \n<br/>”;
. [- U; \7 }" H" V$ s - if($m < 90 || $m > 190) {
2 R4 t7 {5 z! i! o. b7 B+ Z6 A - break 2;4 k: `6 @2 Y! ^' w2 K7 X
- }1 b5 J5 N5 I- C/ ~( e( v" B8 k; m
- }2 }. m6 t: w, e/ v/ K& I; y
- }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
: c& C6 F* m2 s& y; g. q下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){9 Z- x0 @9 I+ S, |
- if( sqrt($i) <= 29){
3 ^$ U3 e( D5 a$ Q9 M - goto a;
" y$ I3 H @* z! ?7 {/ Z6 M - }
% E% O* v0 L: l - echo “$i”;
9 o* q2 h8 ^' Y4 K+ T - }
4 z8 r0 I% L6 `* O$ T3 H - a:
2 `8 T0 L6 O2 m - echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php
5 [6 Z; r9 ^. H5 k* h - for($i = 1000;$i >= 1 ; $i– ){
5 A- r b" R# x) G - if( sqrt($i) >= 29){5 H8 B$ ~# y& a, I9 G4 T1 ~
- echo”$i \n<br/>”;
* s+ i" G* w$ l3 u - }2 x$ f; ~2 M7 k
- else{: N% k( W1 n) _ v6 Y
- exit;. A& e7 W% D& d/ p# {
- }
# t. Z) R3 l# y' L - }- }7 |- B4 w* j
- echo”本行将不会被输出”;
# a; {0 U) r2 g: F: \* I - ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php
3 m7 L; x% }5 G9 n8 } ^ - for($i = 1000;$i >= 1 ; $i– ){
; p; K- B, D/ m3 {8 @$ g - if( sqrt($i) >= 29){3 z0 j% i$ o F+ \5 F! s6 b
- echo”$i \n<br/>”;9 Y% z* Q& q P7 n
- }1 p" L& d+ r2 R* D: W4 X1 H
- else{+ d8 `7 Y7 w0 B
- return;& E6 H1 [* q/ O5 \+ ^& C
- }
' r" @; q+ u- r9 d - }
# T6 O" _3 G% B, f0 z, R* J P5 | - echo”本行将不会被输出”;# d$ U0 @& v$ y$ h. g" M2 ~! T' }" c
- ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;' s; _8 X Y9 L/ f/ }( W
- $s=1;
; z6 Q* P( b ] X, A - while($i==0)
, J- @+ L0 r, k6 k& u- U' I - {
8 b. I4 J1 U5 K- W' x - if($s==1)5 r1 a: M$ t5 x( o9 _) D
- {
$ j% a% \7 U: X+ a, O$ c, [2 S - $v=8;
& r6 E9 q( f- h - break;
( B0 R1 l3 H7 D8 f! k$ ^ - }* U$ G! w. P- q1 C+ i9 Z4 u
- $v=9;
1 M" H$ {9 C6 s0 c7 c - } w* ~, u# g( @( ]2 J
- 6 ]1 `. y& O6 v+ ~! Y2 i
- echo $v;
复制代码 " `+ f& H, Y; K
& T2 G3 n# I9 o4 x0 Q
|