PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:$ k+ T, L, {. T, `
- <?php# F5 \5 E9 }3 i3 U9 U0 u
-
2 [- a+ p, @! h- | - $i = 1;
9 _6 g, K" K, x! { - while (true) { // 这里看上去这个循环会一直执行
8 t- r' U7 L s J6 }. b* Q) c" N- B - if ($i==2){// 2跳过不显示6 E, x$ K) W# y4 D6 m: O; u
- $i++;
: s$ u/ t; v1 x/ }$ i7 ~* h - continue;
[1 D4 `. P, T* D - } else if($i==5) {// 但到这里$i=5就跳出循循环了0 H* b& z6 V+ B9 D7 w) ~2 ?
- break;
; G5 i, h; l$ ? - } else{/ `. I& X1 U4 _0 r
- echo $i . '<br>';7 N7 i7 k! i% S# T. r* l$ v! d
- }
" X7 b/ w8 n# K - $i++;
; R/ v( x; g) d - }3 @* U! Z$ b8 |+ N6 N3 P9 h
- exit;
( `* _6 {0 p- d0 R# |" O4 x- G - 2 u g( O; N( a5 `2 z7 h
- echo'这里不输出';) H9 N8 m. f2 {4 j4 u0 [. H
- ?>3 Y( H9 ?% g* o8 k
- # E u9 Q& y: @* S: t5 h
- 结果:( h, g5 n' p% ^
- + c" G3 v3 |0 M4 o" v% i) z, l
- 1
) c* R; ]5 a6 E, S - 3
+ M$ h, y: c) P' _# H7 o - 4
复制代码 continue
7 m: U' ]/ C# R, T# j f# \continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php
' w5 u; g/ e: Y - for($i = 1;$i <= 100; $i++ ){
# [8 b( [4 ^5 {3 I, W; c A0 g% j% z& f - if($i % 3 == 0 || $i % 7 == 0){
/ S- F1 `6 [) l9 c8 N' S1 | - continue;
4 s3 J: x' D. ?/ Y - }) D, S Z0 k1 ~
- & #160; else{* B' \( v& p) s0 D
- echo”$i \n<br/>”;
5 x0 I5 N/ F' T4 ]! H - }7 ?4 n3 ?! g: e. j# k6 G7 M( S; ~
- }
8 r0 f% g# Q+ M - ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
_/ ~# s5 e! U2 W1 L - for($j = 1;$j <= 10;$j++){) V+ n& O- x6 ]+ L& f/ \) j
- $m = $i * $i + $j * $j;' v& S$ L; V% F; B* R- `: l
- echo”$m \n<br/>”;9 `# X; Q2 ]0 a2 \, g9 |+ e9 Y
- if($m < 90 || $m > 190) {: A% D" }. J. c) x
- break 2;2 {& x$ q0 j2 k/ ]) m% b
- }
- J, _* E+ g. Q F - }! C" [" U& p$ ~" B: R& i
- }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。* [- }% E% I3 ?
下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){- {2 O' v) }) A. ~7 A
- if( sqrt($i) <= 29){
, E9 h0 ?- H' Z# N0 r& c( \ f - goto a;
# @; D2 X6 H) v, o( V - }# \, T0 M9 A$ B9 @
- echo “$i”;( j7 M, b3 _; \
- }
Z* t9 b& u' u, I; l! S - a:
' h: a7 ^- t" {+ b - echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php7 s9 H* P( m; X
- for($i = 1000;$i >= 1 ; $i– ){
# A$ H, `0 r8 g6 \4 ?* l+ v# R# R - if( sqrt($i) >= 29){" h3 J3 @6 ~* ]
- echo”$i \n<br/>”;$ [- `+ ]6 ?3 q" X8 e: G, T
- }
2 A" T# L. m' R1 ~+ v X6 W; J7 E* n - else{- \2 `. t) n6 q1 C) q
- exit;* [0 O5 M- S$ r) g9 d0 j( x
- }
) m9 }! ?; O- X7 ]; R: j - }6 w$ [2 f; Q. P
- echo”本行将不会被输出”;- i! N1 w) Q7 v+ D% I
- ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php
2 D/ |, ]: ~4 s2 P - for($i = 1000;$i >= 1 ; $i– ){
! c) a! s% X1 U0 Q, s - if( sqrt($i) >= 29){
5 J5 w. B1 F2 T8 i: ~ k D - echo”$i \n<br/>”;
: A: ^' L; W1 g0 q. i+ P - }
- s. B9 u( {7 ^ - else{- ^1 ?3 I: A/ K' Y+ N: v
- return;8 m' m, c. T$ S) n! e$ l' P
- }
- D" a) K, R9 P& s8 Q m - }
* R2 z0 ?, P" C+ r8 n8 S/ _+ J4 ^ - echo”本行将不会被输出”;
! d s/ E3 N0 H3 V' X# y+ q7 Q1 N - ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;
# M& Q3 v! ?8 ]: E! n - $s=1;# ^1 g; b& Y. Q/ h2 Q
- while($i==0)
, B% i6 W* V0 S: S; T" o - {
+ D9 @6 n8 S( ^5 P - if($s==1); h$ t0 d. ~7 I% @; | _
- {
3 R2 J% ~6 c0 P8 a - $v=8;6 W) H1 C/ w: Z7 Z
- break;
: J' w% x- m4 i' I" f9 E - }/ @9 d5 {) y, H. H. J; R8 { D. W
- $v=9;
8 D- b: z4 R+ l: u - }
1 y ]! P, X4 [( c6 }; F9 g -
" W+ i" Q! o" Q- Q - echo $v;
复制代码
) m0 b5 }" M, t
* X, R% y4 u, J" {( E |