PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
- `8 Q1 D3 A. R- <?php7 ]3 a, [6 `+ ?# T0 |
-
8 t( S; F- Q3 d9 ?/ C, z - $i = 1;5 _) M% `0 C! f* X
- while (true) { // 这里看上去这个循环会一直执行7 g, A- s N$ ]$ v: Q' s/ j) l/ N
- if ($i==2){// 2跳过不显示
0 o; j1 F" Z& W7 h5 C' m W n - $i++;
) O b( }( k: H% ~, X& C* n - continue;
' ^7 f) K; P0 p, N9 o6 C - } else if($i==5) {// 但到这里$i=5就跳出循循环了4 E' g# h3 @: {+ U( }0 [- x6 @( y$ L
- break;. e) G. K; W+ f% @1 o) k; }
- } else{
5 C |) R. H( v9 s) h% B - echo $i . '<br>'; W6 E, z# V9 Y$ E+ R) f/ T
- }
; \' ^( O- ~4 \$ e/ u - $i++;9 O( x' M3 g7 F3 k+ s; d6 j
- }
* e: E+ }. [- Y# U9 ` V - exit;
" c' C; l: s% h4 ~) n0 Y -
# O2 x; B- b* c - echo'这里不输出';8 V. F$ g% m5 k5 f, {
- ?>
* v0 ~9 f' B! B; f" |& q, G. c4 U -
3 e; |4 I% K& q) d3 n6 U - 结果:9 q, |1 G2 a" T! t! @2 N1 m
- 3 r0 [$ W" f5 G
- 1& R6 t( e0 n& g
- 3
/ K) \) P( ?& h% d. }. Q - 4
复制代码 continue
+ H8 i i" y4 R( Hcontinue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php
) x+ k: ~0 q, P - for($i = 1;$i <= 100; $i++ ){
3 T- o" x, Y; d# N0 l( e$ T# ?8 r/ w - if($i % 3 == 0 || $i % 7 == 0){4 z1 G& n. p( a
- continue;% k) _% A- F; }/ B7 y" J
- }- l3 x6 t' t8 j: d# u$ _: Q- \
- & #160; else{
! D* d8 e) ^% |# i5 l - echo”$i \n<br/>”;
! |( s( i8 o) _2 p w( w- b - }
8 `5 g) _4 Q9 F# ]* x& x8 O8 { m. e - }5 d0 L* n* N8 u3 b0 S- i: P
- ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
0 P6 j) @* M! V' Z( M - for($j = 1;$j <= 10;$j++){
V! |8 W- G$ n/ T4 ` - $m = $i * $i + $j * $j;
: B0 ?* n% o$ | - echo”$m \n<br/>”;. M7 C1 N; Y2 v9 N3 `9 D% ^
- if($m < 90 || $m > 190) {
1 |0 V, J- I- j - break 2;5 K7 d" a% P3 ]- f6 m! H
- }& e/ X! @ H2 l& R& w: M* U3 @# R
- }
& b4 g4 J! o2 c% T5 s0 u* A. j8 f6 k - }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。6 @* m) u' z- }0 N' n' Y# Q
下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){. E" g% b f: C. z
- if( sqrt($i) <= 29){( i7 Q: K) a# c* t7 f0 _
- goto a;
z+ B# Z1 B' e - }: O* T8 X6 L/ t! z3 a, e
- echo “$i”;) W1 Y4 i- ^/ c. K. g" q" L D/ e. l
- }
' r w8 D8 C- C! G& S - a:
' z& |; `' I) }$ b - echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php
' b5 ^5 @$ X- U5 j - for($i = 1000;$i >= 1 ; $i– ){
- `" e1 R0 ~2 S - if( sqrt($i) >= 29){6 H5 z' v5 k! F8 Z: P+ R" I" B
- echo”$i \n<br/>”;
K6 v- h: O% b8 c8 U6 S/ @2 z$ { - }
$ e: e m$ E0 a; p3 v" O - else{
1 D7 |5 I$ w e( Y8 [ - exit;
, y2 w* P# V& K - }& W6 a. I. L9 T* {: H/ m+ U. t9 w) y
- }' l6 b$ s# ?+ t. l7 h, [/ z1 p6 d
- echo”本行将不会被输出”;, [ W9 K: @/ M
- ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php0 t6 m# F0 Q- E! s; g% [, h1 \
- for($i = 1000;$i >= 1 ; $i– ){
$ c8 v5 K5 H9 h/ s2 b% k - if( sqrt($i) >= 29){2 v' T( k: ~1 o
- echo”$i \n<br/>”;- v G. N7 `( O) s0 O
- }# {) g2 [3 A( p B
- else{5 _+ a$ N* d4 K3 z
- return;
- b; j3 \* g6 t, K9 e9 S4 M0 n - }
9 q. c$ P. ?. ?, N0 S b6 u1 E! m* k - }4 G% V2 ^$ w; d) q! U
- echo”本行将不会被输出”;' R5 v; c8 F1 L1 L, |; Z. u
- ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;
% K' D5 p( S$ c8 _- {1 i - $s=1;$ s3 I2 i9 {' H0 |4 y* p7 ^
- while($i==0)
! X' c# \, Y' c8 E2 @ - {/ Z' s3 A1 s9 p
- if($s==1) X- F+ N- G# I& y
- {! ~; q* x- G& w9 p( `0 h, s6 c
- $v=8;
9 P$ ^* \' X1 G' j - break;4 B9 C7 P* v$ i! w5 J- D
- }0 ]2 Y1 u0 b$ U# r/ N
- $v=9;; @6 ~. C0 p+ V( E& t
- }
0 K* m# l* r6 D2 l0 v+ C - , u0 W) e- `: n; P& R
- echo $v;
复制代码 3 R* C2 s: R8 I3 x, J+ J
4 t" W* f4 J" k w& D, `! K% y
|