PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
" L% B$ w8 q% \/ M- <?php. }7 u+ c2 u# q {0 d% i
- ! d4 I) Y5 M3 J A. K
- $i = 1; Y! G5 p7 v! @0 f, q
- while (true) { // 这里看上去这个循环会一直执行
* K7 B; Q1 ~" `: D; j - if ($i==2){// 2跳过不显示7 V! ~, t4 X9 s4 L
- $i++;$ v z1 F& ^7 L/ D( a; j
- continue;
5 b$ K9 d4 e# a& [! e4 E - } else if($i==5) {// 但到这里$i=5就跳出循循环了! a/ h: i* H8 b* ~, I' A3 l2 c" m
- break;/ c$ l9 Q0 p( Q. K: |: n
- } else{% _" r4 D0 P) H& x! I8 B/ ~4 f* Z
- echo $i . '<br>';
& y# D5 a4 n" ?: t9 ^9 k - }
8 l! ]( s+ j8 V# m7 \; A% ] - $i++;
; ^- t% n3 ^4 V/ o" O - }' \) n$ j& T& F/ \
- exit;' T0 T# A8 g! D1 f# V& \- X( g
-
7 m* c" z g) }4 g, v( Q6 W6 w+ e - echo'这里不输出';
( o% a# J5 j/ a! y1 S; d - ?>
& @! R; i" _8 T4 N( t* V -
2 J! s! E% G% X. Y3 y - 结果:8 H* u# ^- s( e6 I: }* D" O$ o
- 1 c* m# J. p# O u# h
- 1
7 Z5 J6 k; \. v& D: w" W# p" S% [ - 3& t3 O# ?: ]4 w! [$ ^
- 4
复制代码 continue
+ E1 A8 ^+ W- {* \; q4 {continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php" _+ a! y) w, i+ \% L
- for($i = 1;$i <= 100; $i++ ){
" j9 N# }( a# b8 D. D, }6 h - if($i % 3 == 0 || $i % 7 == 0){1 W$ H# H% r1 R
- continue;: Y( P6 U3 \ O$ [
- }
& U& z2 q: |2 I4 ~+ |1 F6 | - & #160; else{
, A; _1 R4 o7 t# d! |# k' y1 x, V# R9 o - echo”$i \n<br/>”;
/ E0 }3 I5 k+ z2 J8 P0 _4 S - }
" J; J0 z0 H I( @2 A7 \* \ - }
; Z9 \; D, L6 |2 d& r2 S* ~1 i# ` - ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){& f, d/ v% I( Q" V' ^4 u
- for($j = 1;$j <= 10;$j++){
5 F* V3 t+ d1 ]8 N! s2 p - $m = $i * $i + $j * $j;7 @% v5 k: S- h. C! S+ l' I, A# |
- echo”$m \n<br/>”;$ d6 J- {$ p: Q) C
- if($m < 90 || $m > 190) {
( U( ^" l# R! Q0 E: {4 L. C - break 2;
, U( f7 v+ ~0 K% c) ? - }5 i/ G' s" e% ]4 a1 j
- }2 L: D& a" ^9 O/ y
- }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
: c) M/ U! {+ b N. f下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){5 u3 d; R7 O2 J: r( w" y
- if( sqrt($i) <= 29){9 C" S" G0 I2 x+ U
- goto a;
8 O& a" T6 D' m0 E K - }( W# i) h. p, d7 Q3 t: N/ r
- echo “$i”;* U* _) W! M- _8 V% [9 [; g
- }( U# i' D0 B1 L$ F: v& R( X% [; m
- a:
1 X5 O# A# B% s - echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php% s* S6 l9 Z e( {. O
- for($i = 1000;$i >= 1 ; $i– ){3 U8 g9 y# \6 ~8 H. z& D1 t
- if( sqrt($i) >= 29){/ l9 n& n$ O2 e
- echo”$i \n<br/>”;4 {/ a8 _- i6 u# L' W
- }3 q: B4 P$ |2 T- G
- else{: b0 Y8 o+ z, j" w0 k/ k
- exit;
1 D' k* W3 k$ g, L - }' J9 n) r L# y$ Q% x
- }- n" `8 M/ |9 Z' n) W
- echo”本行将不会被输出”;9 ^" E; E- x: e9 |6 \
- ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php
4 Z2 ^- `" F' K0 `7 I m - for($i = 1000;$i >= 1 ; $i– ){
( q" H! X* b V1 ]& T - if( sqrt($i) >= 29){
0 x6 ? M7 x% a0 U3 M( c+ f - echo”$i \n<br/>”;
$ d9 [' y5 a, ]3 m9 u* | - }
. f8 _, @- C2 q5 Q* B5 o" j - else{
! D U5 W( j: R/ ^$ y( f$ M - return;
[! p5 Q4 A, i( a6 r - }& b: Q8 C7 i8 H3 X7 _
- }
0 ]2 P9 o6 F% x - echo”本行将不会被输出”;
0 k( i8 g$ z- x" A - ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;: B/ ^7 }9 G; h& d- {2 f0 O
- $s=1;3 r$ O4 z" W; ?) k
- while($i==0)' C1 O5 E; f2 n q& S
- {4 R% B- i9 y0 u1 t
- if($s==1)
1 r" _) C- I, f& ^- J9 ?+ P - {4 w' h3 ]1 |9 W* G: @
- $v=8;6 n6 |9 f# x% k
- break;8 x) s/ `; e# P& I8 L% B' t* r
- }
" e0 l+ e2 i% h9 u$ s3 E - $v=9;
: U6 u$ Y3 j2 X: C4 `, Y+ b9 W0 \ - }
( Y* X0 R! z! u# J( _) F' Q - - L$ Q9 N2 }. t9 k
- echo $v;
复制代码 ) D% c( z! t: W7 V0 Y% O& P
; M: V+ v, U" t6 N5 X% L2 Z- P |