PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:$ y; Z' z- o7 t- O
- <?php
0 o+ Q2 {) w4 F7 j -
. h0 P' e7 t# k5 r8 e. O( y8 ^ - $i = 1;: N* _% E A9 x) Y: S5 w
- while (true) { // 这里看上去这个循环会一直执行
' E6 f* ]( o6 o" C$ p- ] - if ($i==2){// 2跳过不显示& o+ r) ]! s# g7 g; ~: Z, f0 z1 T
- $i++;, @7 K. s% M9 q2 x* R
- continue;. {9 K- Z' s1 U0 x
- } else if($i==5) {// 但到这里$i=5就跳出循循环了
5 K* x) E# [5 ?4 y5 G m - break;
, L* h7 W- Z3 l* a - } else{- Q: h B- M! t n
- echo $i . '<br>';# O4 n1 z5 I+ B6 k( ?
- }
7 E9 k: H( F7 V% @8 ]+ J - $i++;7 v- r5 c, q O- o3 x2 P6 d
- }. ^* o/ a% w; }
- exit;
: q. m! ?9 ^& j' {- M -
& R% W& A2 u4 w - echo'这里不输出';' f4 m( g. Q! n8 t
- ?>3 Y! h5 E' h. ~5 n9 Q; a0 `
-
- p& y" Y( S; K4 @ - 结果:
$ \, Y- ~0 o) Y+ _/ }7 { -
( L* H5 a& e* c2 k" d1 v3 ? - 19 O4 }( ^' E: C0 r$ B$ r
- 3
$ |; \9 M+ A" v: o. A( s( u - 4
复制代码 continue
+ H, x; \% E. Rcontinue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php
0 Y8 ^8 E: }: j7 v: v - for($i = 1;$i <= 100; $i++ ){
8 I( [6 S3 ?+ \* g+ s3 M: O - if($i % 3 == 0 || $i % 7 == 0){. L' T4 ~5 W- h+ p& y) D1 u5 L
- continue;
! A- y# U8 y4 G# g$ E$ Q. Q H2 U - }
# j! M- t4 _$ _7 J2 Q - & #160; else{
' }- `# A, \( }7 x6 \ - echo”$i \n<br/>”;
- P! q& s% f9 t3 x - }8 U( q8 R8 w s4 [" e6 |1 a. K
- }
) I4 n- A. K0 ~" R/ B - ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){, V7 a9 U, |$ f+ n# S" g9 o- A
- for($j = 1;$j <= 10;$j++){
0 d' C. V: y( R# _: F" j! q - $m = $i * $i + $j * $j;0 n0 h9 |# v9 u' i* W5 `
- echo”$m \n<br/>”;
n" [% i' R( i - if($m < 90 || $m > 190) {4 @' R ~7 t9 j" A8 [$ R
- break 2;" @ d* X! A* N+ \
- }
- s/ m. t' B" G* c& h - }
, d# u' o& o* F$ V - }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
! D. r7 b& O2 X4 p; }& e下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){
+ g, f; f5 {. P. Z - if( sqrt($i) <= 29){
* N) E. I* r6 b1 T# C2 H C - goto a;
9 v* t1 B" d* Z" o- K - }9 _) K* {- c9 S/ Y& Q
- echo “$i”;
3 p7 X) x; V. A4 @ - }6 L- L0 {2 f' w8 P. G. b$ D
- a:( S+ q$ a& V8 |
- echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php& @/ J/ ]% o2 V, D- s2 z
- for($i = 1000;$i >= 1 ; $i– ){
1 ?7 B1 ?" {# Q1 C, W! N0 K, { - if( sqrt($i) >= 29){
9 f$ ?" g. b/ H9 i+ e ^+ Y - echo”$i \n<br/>”;3 x! O/ f: I) j# _ n( r" V& l8 Q8 U/ O
- }3 l5 u1 @3 i; Z/ {; ]; h
- else{
4 I. a! q+ |6 @ - exit;
) N# W* r/ |0 c - }
( u; X5 b, o& S& \) X6 a, P: R - }* e: G# q! e3 s) U; ~
- echo”本行将不会被输出”;
# L# A7 z; u3 b/ ~1 h - ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php
9 x& a" d6 o4 Q" }1 R. P. b$ X - for($i = 1000;$i >= 1 ; $i– ){ Z9 ~2 E0 W4 F. I C
- if( sqrt($i) >= 29){( C$ M' [9 S. E, w5 V m; D9 K
- echo”$i \n<br/>”;, R% p: |6 g. b/ Z5 J* Y4 D
- }
3 w4 _' A* M: [) s2 U- q1 B - else{# Q' e" d+ c% |5 z, F
- return;8 |, K5 H" R. o8 C
- }. o2 u5 V4 L9 D2 @
- }
0 E* x+ R$ ^6 p - echo”本行将不会被输出”;
/ j0 e# a ~; M% `- }9 `0 j9 W - ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;; J1 q5 m6 `2 t2 J; c3 e
- $s=1;
7 I' z1 ?0 W, t, K h6 o - while($i==0)
8 ?9 y4 M9 \6 I6 C - {. K/ ]1 i2 [1 r; v$ @" o- w9 M+ B
- if($s==1)
$ n9 r6 e- @1 N3 L2 X - {& c, `2 a$ a- h9 _7 Y3 E; Z: O
- $v=8;1 k L( d$ ?4 k2 F" }2 V
- break;
7 O, ~6 O; i- W$ F - }
4 _: }5 Z' z" b1 y& W ?* ~ - $v=9;; T/ {, S$ Y; V* Q Q
- }. j% U# i: m) Y( Y, q: x- F
-
; A" M; X* F( u5 l6 l - echo $v;
复制代码 $ g+ L7 w* v6 @4 R
# K$ i3 m6 W! f* d7 n |