PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
d# u; x" Q) b6 ?7 N7 i) w- H) C- <?php3 _9 N% X) d2 Y, a9 I4 t; G, v
-
: X5 a2 t/ |7 e" e; p7 S - $i = 1;
7 |: W8 b' ~& d1 S; t# x - while (true) { // 这里看上去这个循环会一直执行6 b- b* ?/ s. t* V- V9 j3 \
- if ($i==2){// 2跳过不显示% Q5 l" N: q8 F
- $i++;# u2 Y$ {6 L8 b" K- n
- continue;% S7 Z. z, ?) B G6 y i
- } else if($i==5) {// 但到这里$i=5就跳出循循环了2 @8 _ @/ m: t9 _- l
- break;7 f" K. t8 ]0 T0 {
- } else{/ M4 f% g$ v% a, ?( i- ?8 A
- echo $i . '<br>';# x" L F9 }' Q/ F0 f0 R
- }
+ `4 F% m* Q6 D$ C5 W4 u - $i++;* x) Q) K3 Z! s8 X) a, @
- }
4 B/ n3 G1 a" P - exit;; t' ?1 X- P+ ^! p3 J
-
: _& t8 ]; d6 D5 H9 A- s p. m. | - echo'这里不输出';
( ~2 y3 a" Q. n! T+ R' y8 @: o+ a - ?>" C) n* g- T, ^9 T ~
- 5 w* I0 o5 J" ~1 @' F
- 结果:
& Y3 w2 ~: G6 |9 { -
9 r( ?' w- {) h* ^8 e. T - 18 {+ ]# X3 ]9 A4 R& S
- 3
0 a- C7 g; C4 U- P4 b! B - 4
复制代码 continue
- f# f4 z8 ?' [continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php
# P+ s* m6 H4 C" E* N; z9 C - for($i = 1;$i <= 100; $i++ ){
. q, C2 m9 k5 S- \' J) l, t - if($i % 3 == 0 || $i % 7 == 0){3 ]! f% `/ a5 d* x7 H3 f4 B' t9 ]
- continue;* \5 v5 Z; g/ T7 y
- }+ d/ e$ T. W8 Q5 e+ j% @
- & #160; else{" @8 l( x9 x K' Q; P' D; k* ~
- echo”$i \n<br/>”;0 C: h/ U9 O. \: G' v
- }9 }8 X1 Q, A# m* a$ H
- }. ]4 s7 F' W( v0 [' ~
- ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
! i# [. T2 \# \& T$ ~9 d& J8 U5 c1 J. D - for($j = 1;$j <= 10;$j++){
9 Y& D: J g" v0 w1 y: G - $m = $i * $i + $j * $j;6 R. w! S/ Z/ E* F) X
- echo”$m \n<br/>”; \1 a% C0 {- o6 r0 b
- if($m < 90 || $m > 190) {/ Z6 e) D |' j [7 M8 E6 h* T. W
- break 2;* ]2 v& o u8 e S4 I2 D
- } }) A+ v' Q0 ?7 \& U
- }
/ `. x6 G3 i( p - }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。0 Q) |# K4 [. _% a! U2 T n& N. n
下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){" N+ X; s% d8 S# M2 ]7 G
- if( sqrt($i) <= 29){, R( p$ M0 a* J _0 |6 s
- goto a;
# }" \2 a0 ~6 q9 ` - }
6 b6 P, t S# s. g% q3 j, [3 L - echo “$i”;
8 t$ W5 E( r) `0 y+ ^ - }; P) B$ G' k% S9 B- T8 D. F
- a:' ]/ |! _5 ~( n7 @
- echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php- T, S, v$ `! i @5 G% i$ u
- for($i = 1000;$i >= 1 ; $i– ){
4 b- z( \ M; }. g; @3 i A i - if( sqrt($i) >= 29){
6 r; P6 a3 U6 n( q4 t9 K( F - echo”$i \n<br/>”;" k/ @5 H# s2 n) R' w# e1 ?
- }' ?. }0 e9 `# o9 `- ~
- else{
) d0 [* n: W' K9 ^2 e% F/ y - exit;, q$ V) ^1 }8 o, Y6 y2 C; d
- } i- ^" e/ e& @5 B7 w1 J% |
- }
3 [: _$ F* F; T7 z, Q: h - echo”本行将不会被输出”;
3 D. _6 t3 r) h H# I' [' b: @# N0 c - ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php: g l. |* E1 w2 e* E
- for($i = 1000;$i >= 1 ; $i– ){
6 @! x8 G B2 L - if( sqrt($i) >= 29){8 u: O2 S9 ]8 b: H5 h/ R7 r& r+ D
- echo”$i \n<br/>”;1 [! R, G3 z+ ]1 R- D+ |( c
- }
2 ]- F+ `' G" c% |1 ~8 w - else{
: T* ]; g* K; n! b. A9 E - return;
* k' P8 b( K% ?% x; s - }# i& Y+ ?$ y1 T. R6 t; e0 t
- }
& M: \! b' d# {4 e - echo”本行将不会被输出”;
- {8 W: e# X& J6 S P, ~ - ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;1 Q3 i7 m6 w2 U7 B0 A# f& p
- $s=1;0 M- U4 o# x: r( g7 e2 x0 u1 K# ~6 o
- while($i==0)
8 ]& A2 ? X% B4 s, [ - {" X# i& o8 }7 x$ Q: E* s& Q
- if($s==1)
# } Y9 G7 S+ @% d3 G, C - {( ^9 S' Y5 T% h/ m& l
- $v=8;
( n5 Z. }+ ?% X: B - break;
; s: U2 ?. g7 A0 D7 l" T - }( t0 Y, e2 E, U) b! C3 z
- $v=9;
: L0 }( s* V6 m8 T. ] - }" t. J8 @3 I# j" z: P3 C V
- 7 O* M, G' S/ u" @9 e& B; ]
- echo $v;
复制代码
8 Z0 L. g4 Z- h2 J# d) q0 K. {" y3 N9 ?! n; K
|