PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式: b/ g; W4 c* a1 N
- <?php
) M' W3 `5 m- G; g" K* G* ~ -
, ?6 @# r' [% K# _- ]( M - $i = 1;
& S* ?, f! E' K! q# f: g" _ - while (true) { // 这里看上去这个循环会一直执行
$ a; X8 @5 w- t0 z- v - if ($i==2){// 2跳过不显示
# c3 W! {" p* L3 g& G- Y" b G' N2 S: ?0 m - $i++;; |1 z0 O5 j4 Q
- continue;4 z6 I: } C# _! m
- } else if($i==5) {// 但到这里$i=5就跳出循循环了
6 U V8 v; b7 O$ w. m - break;
$ j$ b; [& @! {/ P [1 i5 v - } else{/ e& s- _5 G6 P* ^ j
- echo $i . '<br>';2 H% }8 z/ C+ w( ^' D! l
- }
$ V( F3 Y" \) P3 ] - $i++;
5 E* N& l: Q$ T9 J1 v - }
9 l' o ~2 _- q. s- p( ]4 P - exit;
( P, |7 {7 K/ \ r) H) p W -
/ S- p1 F: `- F1 V8 P - echo'这里不输出';) D$ g+ ^2 Z, Q5 A6 N# y6 \0 j1 z8 P, m
- ?>
/ S( @) I" s7 I# W& O( s, ?8 y' W* { -
) G T1 t; u( _; N0 { n" } - 结果:! ^/ d8 Z( p$ a+ R7 ]' p8 ?& K
- a% B7 [ ]1 n- G' c! p. w( a1 U7 o
- 1
! q. _1 M' ~" L \. [. P1 U/ F - 36 d- X! z2 |( y) t' M
- 4
复制代码 continue) Q" P: e# {4 E. _! ~7 E: O8 b1 l
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php
7 k2 ^$ N! S7 ?7 ?, ^6 @; Z! q - for($i = 1;$i <= 100; $i++ ){
5 @) }& q5 ?2 _& f - if($i % 3 == 0 || $i % 7 == 0){
" j: c2 \+ H, M) g - continue;# O! W" Y" f0 o3 y. w5 h+ f
- }
% T# {8 `, G8 Y* O - & #160; else{4 N* z! s8 W7 T& r) `$ ^9 a
- echo”$i \n<br/>”;' Q# J: I; n+ `1 }4 J7 h
- }
% u( ~/ O5 i6 ^* d) J+ x4 Z3 c - }
* n' [" S2 A' S& j" q# ^ - ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){$ O1 z5 G Y3 s' L& t4 R
- for($j = 1;$j <= 10;$j++){
) v5 b6 K& {2 P }+ J3 t - $m = $i * $i + $j * $j;' z- b: w. a8 m7 ]5 N6 F* [
- echo”$m \n<br/>”;
2 }+ ?) P: D/ x6 ]. I. Q) T9 C$ d - if($m < 90 || $m > 190) {
0 {0 r4 C0 s0 r$ H$ Z: C& Z; N* H - break 2;
5 y! k$ J: m/ @. l4 b - }
: S7 U$ ]+ l4 s8 {$ R# s - }% R5 ^. ^3 u0 p: |
- }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。, O3 J! \2 T$ P% z. S
下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){, H3 j, ~- i, ]8 ^1 I: D: R
- if( sqrt($i) <= 29){% }$ w/ B ~; c
- goto a;
6 B2 I" h$ U+ t$ S$ V- { - }, P. n' o" E0 o+ h
- echo “$i”;( J4 b3 }/ h. a& F- a; A
- }+ a7 h. ^ c9 @* n8 x
- a:- \' N2 \" q* @8 H8 u) B/ o1 a
- echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php
4 A0 M8 F$ _ a - for($i = 1000;$i >= 1 ; $i– ){9 T) g+ A8 P" K+ @
- if( sqrt($i) >= 29){4 u/ m+ D) a, Z4 J
- echo”$i \n<br/>”;
+ ^1 ]0 M/ I- S: l - }1 P0 y# R3 X5 a& Z
- else{) O* G: h& S4 T E% {
- exit;
S+ v4 \4 `/ `3 l - }2 @, O6 y- T- I, z( |
- }7 u# k6 E, p2 e- q2 a5 K& f+ J% t8 S
- echo”本行将不会被输出”;
# N- O n; r$ p4 u R! V - ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php0 b. d& I& b7 O! k
- for($i = 1000;$i >= 1 ; $i– ){$ [/ t+ D6 F7 P6 V. `! |
- if( sqrt($i) >= 29){, A& i- o7 M" {! l8 I8 B
- echo”$i \n<br/>”;2 x9 d+ s: G8 W0 t% f
- }
$ c; u0 \) `7 t* v" Z: X( a - else{- o9 v7 Z" L+ u& y
- return;! b( N) |; q' s S, {1 L
- }
1 S* J5 v$ ^% `# ~8 v4 k - }
9 D! j M6 l- r - echo”本行将不会被输出”;; _2 X+ U: Q, m" L% Y2 ~% G
- ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;
# _% L8 F0 H# ]0 h" n; l - $s=1;
; O6 X" z/ b# n+ ]0 N - while($i==0)
; B) ], U4 S6 Y/ y - {
1 x' k8 @# b* t% g$ s - if($s==1)1 j/ M+ |5 ~9 U# G' f
- {
N" q% S) _* a' m* g - $v=8;0 C( w: \) X( F1 j5 c: B( r3 u
- break;/ }9 F- y$ X" @" l
- }
' q0 G2 b7 R3 J/ n% Y" e' d2 h - $v=9;; o/ G( }7 |& F' y
- }
w7 J+ R+ b" G# W -
K. s! J2 O+ r7 V' ?7 z' k: z - echo $v;
复制代码 4 k; Y3 y; Q! w, \% I
/ j+ t# I7 E/ c& |; |# P |