PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
+ C1 e+ X7 { u6 G- <?php! b; \8 o. R$ H/ f6 a
- & t2 D+ u& V9 f/ t0 n
- $i = 1;- }1 Y* Z$ }+ W
- while (true) { // 这里看上去这个循环会一直执行
- Q d# K* t4 ] x7 o - if ($i==2){// 2跳过不显示( y- U4 T# a6 J$ f, r3 D# \ {
- $i++;2 M6 e4 u1 y" K" y' y j0 [
- continue;
+ a, X y, p8 Z9 | - } else if($i==5) {// 但到这里$i=5就跳出循循环了( N8 Y5 I1 u3 i( W) h
- break;! S" S% U# p1 }
- } else{( |4 v* {1 |3 J- b$ A! r( m) e
- echo $i . '<br>';/ J4 R* ? N/ O9 t0 B& D# ^1 Y
- }
0 h: U) G, r. w1 c7 O) k/ D - $i++;. e* r; S8 b6 u! A: O
- }/ w/ `) F3 m9 Z- g- {) k8 T
- exit;, ^& y1 D7 C% o# L: ]) Y
-
) F% l& Y7 @ p3 T& @* e& \# p - echo'这里不输出';
. Q. @8 B$ J2 M! T/ L4 N0 W - ?>' G! e! n. `( @% B. d+ }# l0 C
- 9 R& W0 [( {9 t
- 结果:$ x5 A3 X4 E' N
- * @2 ~; l Q0 a# F
- 1: j j5 s" Q: x
- 32 ^& f% [) L$ P6 y2 t
- 4
复制代码 continue
# b1 M; F" O; h+ S/ x1 A, a h. ucontinue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php
5 u* r" S5 O! p5 q - for($i = 1;$i <= 100; $i++ ){
6 H5 C% M) i) Q0 m5 g - if($i % 3 == 0 || $i % 7 == 0){1 g2 M8 {2 P* ~ n
- continue;6 I$ Z4 ^; ]3 O" ]1 F' h
- }
, m8 i3 E. ]% h - & #160; else{( l2 O8 A2 N5 U2 [& M
- echo”$i \n<br/>”;
$ Z# V/ _0 K% U0 w) O - }) p8 ]9 Z; Y0 ~# @$ q8 T
- }) n" u; S) C! H; a) p4 K
- ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
- b+ Y: k$ h/ `9 n- F - for($j = 1;$j <= 10;$j++){( t8 p4 w- Q: v* p
- $m = $i * $i + $j * $j;; Y% d" r+ i7 ^, C8 j2 w
- echo”$m \n<br/>”;
R1 F2 W$ a* ~7 O% b( F - if($m < 90 || $m > 190) { t1 L6 Y( P+ W" V
- break 2;
6 j2 b- E+ X" U' A6 h2 F; P) P - }
/ r- L2 ~1 |6 q( @ - }
# B4 u1 h3 {* ~: J( b' h& m - }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。7 L k4 n. q: j; M+ U. S' r
下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){8 ]/ d1 ^" t( ], D
- if( sqrt($i) <= 29){
8 @' O T7 j; H. \( { - goto a;
p) b J+ ~$ V! \9 B! @' [) C - }+ N+ [/ F- Z$ K
- echo “$i”;
/ d: L z7 j8 t7 o& O - }
}9 R- P, g6 Z - a:2 Z1 Y# a4 [2 C4 r! \: Z
- echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php2 q, j# x6 c! Z, F
- for($i = 1000;$i >= 1 ; $i– ){
$ e7 s% k |2 y: u# @ - if( sqrt($i) >= 29){
" r- ]& f! [1 z/ C+ U - echo”$i \n<br/>”;
2 ?5 W, P: `! o( i8 p( X6 [ - }2 n( H8 i# Z8 {1 H5 x. J5 h# f3 f
- else{
: T& E1 l c! C5 ]0 H* k) S - exit;/ l1 o1 l$ H5 J7 S" m, X {
- }
7 `* L% t0 [$ H# b7 @0 f - } h; k# Z) B+ A8 k
- echo”本行将不会被输出”;& K8 B1 H8 d. w$ g2 a. A& i: I
- ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php. X9 D( u! b7 J
- for($i = 1000;$i >= 1 ; $i– ){
+ U0 K3 m1 w4 m) H - if( sqrt($i) >= 29){2 u) `% n3 |4 I4 `% I0 v
- echo”$i \n<br/>”;) F4 E" M- f- z' g8 n% L( a
- }
. s9 b) M) L$ S F: Q+ o7 _ - else{4 l* C5 r. w/ R8 R; }+ p
- return;
7 q5 X$ l2 i' G1 F: M/ | - }. k; \5 r2 r. a4 y
- }+ j3 E `. E( L' ^, @, B0 G
- echo”本行将不会被输出”;
0 Y T( V: d3 S$ F' v% f - ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0; _0 O$ J9 d0 L' v, P! O
- $s=1;& q! J* I, I. v* L/ p
- while($i==0)2 Z) X: I# F/ K. ^( {9 X
- {
2 f8 q9 S) r7 @4 J& U; d" Y w - if($s==1)" o1 P6 a* B. v$ X7 B3 v. r
- {
: X1 X( p8 q; f' i: ^0 h S - $v=8;
7 r5 w# F7 h9 O$ }- B1 h( P$ q - break;% g" _! ?6 N$ q. }$ v
- }
9 j- U" z/ o, m; A - $v=9;
n+ w6 s' `; w1 Y7 i! g( F! O: u) _ - }
4 m" R q" y: R1 q: r4 F8 \% S% J -
4 v$ P! J4 J. J" g6 D - echo $v;
复制代码
+ p- Z" Z/ S* s$ f" N ~; ]0 Q7 P) L) O7 J
|