PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:; `( W# p+ m8 N" c1 @% W
- <?php( x2 P) _8 N8 s% P9 m: r3 y
- - z; g( j4 R" W7 Y. h4 Q9 K
- $i = 1;
* v% i, R _ Z: r: A - while (true) { // 这里看上去这个循环会一直执行1 u; E0 a0 v& G+ z3 P% t. ]* r& P
- if ($i==2){// 2跳过不显示
0 @* r* c' v5 ? - $i++;2 m2 F" b3 ^- }1 {# c0 u. Z
- continue;" D7 B' D) s1 q9 P2 ~8 F Z( D
- } else if($i==5) {// 但到这里$i=5就跳出循循环了' I/ P; h/ \1 |
- break;
5 z% n( ^$ U4 m+ P3 Y - } else{) v% M1 [) S2 L1 @" {9 _5 P7 A
- echo $i . '<br>';- ]9 u" Z$ @. q+ d7 }1 a! L% C
- }
" _9 r1 W; ], v2 T& ` - $i++;. P8 U* P3 u1 t1 @
- } O, `! x) p9 h) Y+ `. I( N7 z1 P
- exit;& n# H6 V0 T' q6 D+ a0 }, t! T
-
. w; \7 P5 p: ^% ^, G - echo'这里不输出';6 w% Y! I' P8 v8 J/ E ^: K
- ?>, X8 B7 \5 z( C- A: }! K' h5 ^/ N* |2 M
- , s* `- F/ @) X. L2 A( }# x, D- v/ i
- 结果:' g, r5 A. q: v9 y% R, U% i# L7 f
-
/ n* C8 ]9 L4 y R& F- x% F - 1
1 p; @+ g) e% |/ b - 37 H/ Y* ?: N9 d. _
- 4
复制代码 continue p& v& e9 N0 Z
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php+ b0 `7 ~; }3 K: J0 z
- for($i = 1;$i <= 100; $i++ ){" ~% s6 [0 O5 s. B
- if($i % 3 == 0 || $i % 7 == 0){
# H4 Z; `2 P% X% C# v8 c - continue;
$ F8 k! L3 V f. X, X; C( q - }
* L3 C' L) F8 ] - & #160; else{3 M5 \+ O7 L |( R m* `' e: j h2 e. t
- echo”$i \n<br/>”;
I4 [) Z+ U6 P% m/ { - }8 ]. Z) y+ X- U" d& |
- }
. t" ]# A. K8 Q0 Y" C( Q8 h! O - ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
9 ?! s8 t7 w2 U - for($j = 1;$j <= 10;$j++){3 J6 K; u; l" E) X- O
- $m = $i * $i + $j * $j;/ ^1 q' D- l4 G6 i/ n
- echo”$m \n<br/>”;1 W5 {. y+ x% t
- if($m < 90 || $m > 190) {9 Y9 [- H; d: M, b1 Q
- break 2;
- R* W' s( }4 u - }
: R& P8 }2 r4 z/ x. H - }
! C g2 P9 H1 a+ ]: G - }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
Y0 h: A6 Y$ R* n( b& l- {- o8 Y下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){
2 {# h1 }- a2 G" v, N - if( sqrt($i) <= 29){3 m! K. C! x# f8 W, Q. N+ q
- goto a;
0 U+ A" S; }/ z2 V) S" ~+ b. Y - }$ b( ^+ L8 D. o% D7 Z0 l B
- echo “$i”;
! P. O6 e* k+ P+ Y8 Y1 O/ N" c$ w - }. Z' u8 |1 v/ c+ @- I% T& v3 |
- a:
; ~& }2 H1 y- A- @3 q4 ^ - echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php4 v# E1 w* D6 Y2 t& a) B- h
- for($i = 1000;$i >= 1 ; $i– ){
7 R6 Z( a% F; H4 } - if( sqrt($i) >= 29){1 Y. c- E8 a; A2 Q/ ]* Y# G0 ~
- echo”$i \n<br/>”;% q. F% A2 e) n
- }
) `1 s- k8 x# r0 v) \# C - else{
8 h6 X* j8 O* K- \+ p) H" k: N - exit;
8 G( f4 _8 s2 t) n/ W' D - }7 F* p2 H- r& r2 J
- }
% u# o' x7 g$ b2 F - echo”本行将不会被输出”;
* j2 d' o7 g, W" A% l0 T( t2 d - ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php5 b8 \7 Y& E B; K- r
- for($i = 1000;$i >= 1 ; $i– ){6 K4 ]) B: B& t
- if( sqrt($i) >= 29){& W4 M- [6 D, Z* [( v9 z" `, g
- echo”$i \n<br/>”;
" m& g; D% i! B& Q/ H2 i' ]' L - }
7 M, ]" m8 M7 J! ` j7 h2 F0 G% K - else{( S a8 M% n$ p
- return; B2 d3 ~5 d* _1 U. N5 H
- }# F; n& H& x. Y; Y3 C: H7 ]
- }' o. ]/ a) J6 r! o6 g
- echo”本行将不会被输出”;
# c6 R- l4 G* c/ Z: C; X - ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;# H# ]4 m0 ]: @9 {8 Z$ g8 T
- $s=1;: {, k9 e( x& @' f8 Y
- while($i==0)
4 s3 \; S! O: U" f5 u" W# ~* {' Q - {
" a& y3 a3 h! f% n5 ~ - if($s==1)
+ e& k R* S5 u; @ - {
' @/ c9 F8 ]5 T: k" R; y5 y) Y( S% Z - $v=8;
. H& X7 P/ x' d6 B2 z3 S - break;' j0 r& A9 Y) d) {
- }0 o5 i+ x0 J, a2 \
- $v=9;
8 ^. j0 \7 C i! @, S - }
+ r! z0 H _ ?+ {" `& B - 1 s5 J$ _) i$ d+ a& ?
- echo $v;
复制代码 + H$ U* s3 L- f' b2 Z
" w1 z! ?) r M3 {4 ~ |