PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:2 S, L7 ~1 ^; |! x% f* B* c
- <?php3 ~1 X ]* Y Q
-
* T- h; p. N# z; p - $i = 1;3 _% _% D) l" ^6 l1 ?9 `+ `
- while (true) { // 这里看上去这个循环会一直执行* v# l- _. J; L2 \: m
- if ($i==2){// 2跳过不显示# U3 K) ~+ a# X; X7 s
- $i++;2 W A: B! P5 U1 j) _ G
- continue;
+ u' b5 t$ W/ n" c" B. U& d4 m - } else if($i==5) {// 但到这里$i=5就跳出循循环了
% w6 u2 h5 k4 x - break;6 l& [3 S2 J' b4 b; ~0 p$ T7 k
- } else{
9 ?9 C/ K T. K; d0 I3 c+ j - echo $i . '<br>';
$ D$ [: e2 x+ s2 @8 [ - }# P, A% Y7 ~ A$ q5 \8 p
- $i++;; ~/ i2 E4 H: T# C
- }9 `: E) h6 g) ?) `7 j
- exit;4 X. s+ Y/ k4 k
- & c7 t" s( r, z' F
- echo'这里不输出';
/ Y0 @& v& G6 z5 U* | - ?>
0 _: c+ O7 v3 T+ a& ] -
: @4 @3 i8 I/ x2 f Q" \9 R - 结果: p9 B5 w) Z1 c
- 3 u3 S' S3 s0 h+ A
- 1
; n& z e- _/ N& u8 @ - 3
/ z) O: B/ h' i - 4
复制代码 continue
8 m2 i" S( d* M$ R( econtinue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php
% e5 a# x, k6 x4 I, O - for($i = 1;$i <= 100; $i++ ){9 H9 {5 b7 }; N5 s. n
- if($i % 3 == 0 || $i % 7 == 0){4 z1 x) U7 `+ S. k+ C0 P( v+ q' ~
- continue;
% ~: Q5 m6 t0 [ - }
/ M0 J7 g, \8 M( F - & #160; else{! H4 z8 d8 Q! z$ g1 t, O* s
- echo”$i \n<br/>”;( a" ~: J; @/ u2 |7 X, D# Q. j
- }8 T q' Y1 v! |& P, H: W
- }2 u8 p/ H6 E& i+ t# L' P
- ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
- P9 U+ k |) P - for($j = 1;$j <= 10;$j++){
. W! j1 F6 k6 Y0 D1 P, }" ? - $m = $i * $i + $j * $j;
7 d; i& i& k/ c( t0 X I - echo”$m \n<br/>”;0 E8 k1 k) Y, t1 h5 l* a
- if($m < 90 || $m > 190) {
' t* y5 G1 `9 o. i$ e, Z - break 2;
: j4 z6 `0 z7 v! q4 X$ [5 [% }1 x9 k - }% J% T% n8 c* r) V1 U
- }
& H/ B# l( u% j3 y9 m - }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
1 S5 V) C. G! w! F) T下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){, R \/ R& B/ ^+ Q& Q: S$ C
- if( sqrt($i) <= 29){: N, s% @- Q9 s/ d+ e! E
- goto a;0 Z+ O C( J- s/ D2 t8 X: s% Y6 e
- }* F8 e; A7 h9 b9 W% f$ i
- echo “$i”;" i. a0 [$ z# F% e
- }9 l: o. z1 s q, R: D7 r$ ^1 ~
- a:% y2 V3 u5 o8 D/ D
- echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php$ x& c2 K6 C( u$ Q# _, u3 u
- for($i = 1000;$i >= 1 ; $i– ){
; |- a7 o; I3 I- [. D - if( sqrt($i) >= 29){
# O( r0 Z5 C& B) D) V6 ]+ W; [ - echo”$i \n<br/>”; E6 y) y w/ h3 a! F
- }1 u9 u* L7 o, E) F
- else{& d) F, u, W3 c5 n
- exit;4 @ R- U) _7 s
- }+ l3 Y0 u% f2 Y% j1 R+ s% G/ [
- }
2 D9 i( }1 ]8 a - echo”本行将不会被输出”;
* d* }- C1 U( y% u8 J' D* M# L - ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php
5 O) D: d" Y& x! P - for($i = 1000;$i >= 1 ; $i– ){3 `' ^2 N; z" ?3 t) r
- if( sqrt($i) >= 29){
' A. r' o7 s4 X* {% y - echo”$i \n<br/>”;6 C7 s& c' b9 [0 ^
- }
- ]& E2 o8 _) O% w% g( s - else{( x. N; [/ q; p$ l v- P% K
- return;
! x% H% \, J8 E8 F5 N - }
/ d. T, K% H4 C - }
- t+ H0 \! Z. V/ w" c4 ]& b - echo”本行将不会被输出”;
/ W9 f2 Y8 k, g# A- ?* U - ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0; ~3 b# K% b; l% i
- $s=1;
' g3 B' _& x9 _ - while($i==0)
4 m) [; m0 i- |9 H$ G - {) X; a: b8 u6 P9 h. r, b+ T
- if($s==1)
& b7 M+ D/ S) K% u - {
6 D2 c, u* Y( W3 u1 D& v - $v=8;# k! v3 @# O) R$ [: P/ s3 P g
- break;
0 B9 N2 D6 I& R/ s1 W' M# W - }3 H: h# o; \) e, a5 @$ k1 a% X3 r
- $v=9;
' A' ~; I5 q9 D% D* w0 l - }7 q; }5 T1 X I9 R4 L2 X
- " u: J. x3 f& m: R3 T8 X
- echo $v;
复制代码
# J6 e! p. Q$ A* B5 t& t0 O- a0 t0 c$ `$ v( a
|