PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
; _& J) B" s" d- <?php
3 o" I+ e5 ^" R1 i- U |( E -
' x+ }& {, V9 F0 s4 g) q8 x - $i = 1;6 o, I4 o$ ~* D( F/ Y
- while (true) { // 这里看上去这个循环会一直执行1 g: J' i. i- Q
- if ($i==2){// 2跳过不显示* I. _, Y" w& M+ K
- $i++;
. \2 H# D; p2 J# p: ~* i1 d# |9 m+ y - continue;
9 d; K D/ J# r/ U - } else if($i==5) {// 但到这里$i=5就跳出循循环了
5 K2 h. O/ n+ J' o - break;
! M" R: i& `5 Y - } else{
- ?- \ k7 l2 I; R+ ^) ~$ Q - echo $i . '<br>';
. M5 B) V. o y2 z. H" a6 s; { - }
: i+ a4 X) i5 V2 [0 H" L& N. m' F/ a - $i++;
G1 Q, ~5 f% [ - }7 m5 l: [- p5 o3 Z' H7 i
- exit;
' a: M# ~* ?# w4 I& n3 A - 7 x5 ?+ {1 n W& c
- echo'这里不输出';
' I, }8 |1 C% D1 ]( h% s - ?>
& ~+ o9 I5 m7 r, K' e. l M - 5 `7 R- N7 J, |
- 结果:
- b/ [' w9 S' x7 e! p* i -
! T% ?) E0 a0 a: w& {" Y - 1; _! E+ T8 Q! ~( K: h
- 39 D5 p' u0 W( N, g) v+ w, Q2 S3 G
- 4
复制代码 continue: ?: y' k5 d# v6 E
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php) D) i' t7 g8 t9 c
- for($i = 1;$i <= 100; $i++ ){+ {$ L5 X- b0 V" E, ?6 ^& ?
- if($i % 3 == 0 || $i % 7 == 0){
0 d1 b& M0 [; E: k! K. H0 j4 {7 V - continue;: w! h' l; U$ N/ X8 V) i e
- }
* P& Y2 R: `9 { f0 X& @' W - & #160; else{
) x1 r+ d1 y6 { a' U: d/ P) X - echo”$i \n<br/>”;
/ A" q- R/ f+ h) N# H - }# k# W- f, j( V+ R; O9 c
- }4 F2 H: ]7 t1 x( }+ n2 b& e# e X
- ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
9 t) C1 g/ R) I - for($j = 1;$j <= 10;$j++){" q0 m& u0 M9 N
- $m = $i * $i + $j * $j;6 J/ d _/ d6 r& y9 F6 p& @
- echo”$m \n<br/>”;
* _% Q7 _$ \: p$ J! x - if($m < 90 || $m > 190) {
7 a* T; {( Q& U - break 2;
/ R9 {1 y& L' c0 W2 Q9 g" f9 I - }
( k$ F+ l; H. w$ F, S& R$ x - }
* M' x1 ]. q) g - }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
: f( F7 k8 w( w下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){$ k- j* r7 Y; ]1 ~. |3 {
- if( sqrt($i) <= 29){8 v4 a" i3 e4 } \
- goto a;/ Y( ~; H6 |$ R7 l0 H' O
- }; p8 E/ J4 n1 ^( i2 [( o, d
- echo “$i”;
9 P/ X* `- V9 F. k# t - }5 h8 Y' m* R0 t
- a:
% O0 g0 n: o! J8 ] - echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php1 W& U. U! K# K" ~: r
- for($i = 1000;$i >= 1 ; $i– ){, k" n E u5 s3 {& I% H
- if( sqrt($i) >= 29){
7 H" ~$ B; `3 ~4 {8 T - echo”$i \n<br/>”;
6 w' U! l" F; t8 H, o$ W2 k - }
% _6 ~' ?- \8 C( ]/ J" w3 B - else{# U! F) m+ b' s8 [
- exit;1 H# G$ B8 B$ K3 O9 ?% _$ r# ]
- }4 W/ M* _" Z( P# d* v" O: e
- }
" K, q& p: G- U8 a9 @ - echo”本行将不会被输出”;/ J: o7 M/ p5 K# k
- ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php; o- y1 N' f" E2 |! S) r
- for($i = 1000;$i >= 1 ; $i– ){9 s. q6 r0 t9 e3 O
- if( sqrt($i) >= 29){
9 L( {* x) T9 ]# u+ @' S. } - echo”$i \n<br/>”;
- ?1 X" a( n0 `% B- i Z! A - }
) q% d; ^8 `( x. G" | - else{
$ U* `. L0 L q+ A, ~# { - return;
+ r/ V4 Y" g! I5 l - }& W, L+ J" { b. ~
- }" c* ^$ z' n0 s* [( y$ V: z2 q7 k* ?
- echo”本行将不会被输出”;
( E+ D% @, [; k0 V& ^8 K8 `) \9 K- ] - ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;
7 n9 ]2 h y6 i' R - $s=1;9 y4 C+ V) ?( F4 ^" B! {
- while($i==0)
) T `! ?0 C' Q+ M - {
T5 J2 u6 F3 k4 p - if($s==1)
: c- F& C0 b/ b" r# O& Z - {
$ I/ N* B' r- V3 Y! j u% L - $v=8;
h |% I7 y; t @3 w - break;
% ?# Y M: @, W3 S - }
2 s) e! w# S) Z I2 Z - $v=9;
) p1 E+ o- v; O0 V5 F - }+ W& l: F$ A+ u
-
5 [0 O: @7 K/ ^9 O: L" k% G3 p - echo $v;
复制代码
) U2 e3 z: `: L3 E: g' d# }2 k: r/ A: E
|