PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
! R9 T7 T/ T) N. I, W D- <?php
! | N' f& N+ f4 w+ I - 7 ^0 A" f3 N& }7 I* E/ W8 @
- $i = 1; \( Z0 e. [+ S/ F: I5 K) q [
- while (true) { // 这里看上去这个循环会一直执行7 I) y! b6 Z- R {1 h! Q
- if ($i==2){// 2跳过不显示6 r1 s" y3 k; x0 \2 C# K
- $i++;2 Y& _& @( C9 C2 s
- continue;
U; K, l# R$ j; g - } else if($i==5) {// 但到这里$i=5就跳出循循环了4 F" c+ S. e! C# P, ^3 ^
- break;8 n3 y$ o# D- H* {5 k z" ?1 n
- } else{ w1 n8 O5 }' L3 f8 P
- echo $i . '<br>';" u! Z( i4 U+ c. L9 F
- }
* m3 m* O; I) @0 K; d - $i++;: d, b5 h+ }) K0 o! M; M, n
- }- t- d: J8 [ {! B% b
- exit;4 v* D g7 @1 p% v
-
" H( e0 {- o0 U- _ - echo'这里不输出';+ y: U9 c- e1 |/ r, o2 w2 f
- ?>
+ P6 V$ i* e8 B. {1 C -
0 f4 c: F0 @" U9 ^$ @ - 结果:
8 a; n: h# {; E b' Z$ r8 @- Y - 3 {0 ?1 e0 C2 o( K; P3 o' y( c
- 1: |8 A" M- M4 K" O
- 3
+ s3 X9 o: t0 W h. Y# V8 @8 j - 4
复制代码 continue
/ p" r' I$ h, G1 p& c9 K9 _$ _continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php
' n. _' j4 i* |& @7 ? - for($i = 1;$i <= 100; $i++ ){
! h" ~6 l8 k) N* p* X; Z6 ] - if($i % 3 == 0 || $i % 7 == 0){
+ v; g' R9 t, R W. C - continue;
! v& C7 T* U, g( r3 R - }
p+ R* Y! L3 P, j& s - & #160; else{- l" T3 L! T% W) R# |5 ~( l- _( v- ^( L
- echo”$i \n<br/>”;
7 E, s+ Q6 M# Z, ]& c- {& H# L! [ - }
4 l0 Q0 K& _- ~ - }
, Y2 t" }( J. E8 {2 Y - ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){3 b& c4 \+ E2 ?7 _& J A8 P
- for($j = 1;$j <= 10;$j++){* j, W+ J" X9 \6 p2 F6 j" P
- $m = $i * $i + $j * $j;
! ?! ]# ~6 ^6 @/ s - echo”$m \n<br/>”;
1 }* ~' F( D' r X+ R8 o! f! D - if($m < 90 || $m > 190) {
: R) N2 S7 G# j& e1 K2 V4 \, g - break 2;
2 j& z7 }: i2 H. G4 V1 [ - }' ], Z' N. i. I, M& l- |; o
- }, i8 P. o8 `& h7 y% w
- }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
6 \* R. k+ ?7 ~下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){4 O$ p: ~' A% F8 Q; s
- if( sqrt($i) <= 29){+ J% L$ }- [0 W+ p8 n
- goto a;
; |6 C% w: r9 R( K; \: V) I - }
- N5 m3 R9 b0 I, I - echo “$i”;2 q: a: d; ]; T. W2 @# g) A
- }
9 o5 } l- x6 ^ a/ `; d - a:
+ t+ e5 s7 a- g+ _ - echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php
( o/ v& e. c8 g5 c9 ~* v& L - for($i = 1000;$i >= 1 ; $i– ){; u* I6 O! ?! |8 Z* U8 l" g: ~6 u
- if( sqrt($i) >= 29){
3 I- |1 E% g! W. `6 a3 E# I. @1 S - echo”$i \n<br/>”;" A0 L( c/ z Z9 v% A, {$ v
- }: k$ I }; e8 @1 O
- else{
+ Z \. ?- ?5 t2 u2 f. i" h$ m - exit;
* |7 J3 }$ Q5 p& T) O5 H( r - }
3 C6 } q+ j1 c7 J( K - }' [/ K7 p8 G2 h4 w1 C( R# [
- echo”本行将不会被输出”;* u* f. O( z) F% D. F' R7 S
- ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php
/ }* R9 w( J( s+ g& |: I - for($i = 1000;$i >= 1 ; $i– ){5 l8 e5 u* A0 o `2 [5 ?0 _
- if( sqrt($i) >= 29){, c5 k T) @: d5 Z
- echo”$i \n<br/>”;6 B7 j5 a0 n2 E
- }
/ B& c9 H1 G. q9 V/ i# E - else{
7 y; q! ?0 X) W5 i3 ?. {, z) }8 { - return;
- F* I2 R& ^% t7 \; m - }4 f" P5 Y, G) y8 P/ _
- }8 G( g; P' o4 S& A
- echo”本行将不会被输出”;. O. W& n: J. y' `
- ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;
3 x; O, A# L0 k9 w$ g i - $s=1;
4 X+ R4 W0 |7 }$ L. h) v4 [" T: o; B - while($i==0)
( \5 w" }/ q9 ?+ d/ ~ - {4 r% Z; W: U1 g
- if($s==1)
0 ^3 S% \ F3 x# k. v9 k - {
' n- q3 Z Z$ k+ f+ l1 h3 l4 l% R8 l; c - $v=8;% O- s, ~( T( N+ o6 q
- break;
2 M/ f3 N( X+ d7 `: ] d" Y - }, L4 M- p% P. ?) J
- $v=9;# J! E! a/ e% W4 {1 e; D7 l
- }
: d t) |8 D7 V, f/ {: O -
. y7 Q& b6 T U$ u - echo $v;
复制代码 ) n g! a$ h! q3 o
: ]6 S/ u8 h0 y: j- U# l |