PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
/ D2 F" Z6 s% N, O$ D3 L: x& D- <?php' z! p* [# G+ D% e" R
- 7 X1 Y( y! J3 g. K$ M, B% V
- $i = 1;2 R/ H! M! D$ k
- while (true) { // 这里看上去这个循环会一直执行
# r5 P( }) Z1 z5 y - if ($i==2){// 2跳过不显示+ g9 I% I$ C2 \1 B9 O
- $i++;
4 v. Q/ ?. d' p0 X: Q - continue;" N z6 S4 R" o; H- _( A* I# N7 M/ ~
- } else if($i==5) {// 但到这里$i=5就跳出循循环了; t* n$ z5 h8 Y- }2 n
- break;
; b, w0 s* p' o ]: L3 I - } else{
: Q. h9 M R9 o2 J) c8 _1 { - echo $i . '<br>';5 F, _" G& W2 V" k$ N. T; c8 z
- }
) J( X2 S/ ~' Y' \- Y# l. g - $i++;
8 y: ^, r1 P; m. [ ?) F - }
2 n+ m" i# _; o! E, Z) ?1 K - exit;. D# W8 q F* H8 G
-
2 k# Y' S" K l+ V2 e: S" N - echo'这里不输出';
2 k$ }( o2 T1 d: Y$ S( _ - ?>7 I. A9 i1 ~( F: V! K
- 0 I7 }1 { u% z: E, `# N/ T: H
- 结果:9 o) K9 n" V4 W
- / B3 q \' K1 b
- 1
' a3 d0 {' |8 E s% A1 [0 i+ s' u - 31 c) |, Q" q& ~; c& Q2 O* z
- 4
复制代码 continue4 D% \- c" I) x/ T
continue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php
2 I' u+ ^7 a, Z9 V - for($i = 1;$i <= 100; $i++ ){
" O9 q* X0 C- t - if($i % 3 == 0 || $i % 7 == 0){" a* R; [- _- E
- continue; `6 A) k$ A. e E. S% x
- }9 f8 |1 }$ D0 B' Y1 R
- & #160; else{0 o4 ~. b: g# y3 r) ?, C
- echo”$i \n<br/>”;
, m9 F* \! c$ s9 {5 q5 S7 ^+ p# w6 N- | - }
; e+ L$ d) N9 n+ J, x" K - }! h. F7 Y. |' |( Q& p
- ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
7 d) H: u3 P% P - for($j = 1;$j <= 10;$j++){
+ x( k, |# h1 g, I% C - $m = $i * $i + $j * $j;
* f1 V- @9 y1 n `9 @/ Y - echo”$m \n<br/>”;0 i) o u; D: f! i
- if($m < 90 || $m > 190) {7 s5 ?( n; o h5 J9 j
- break 2;; Y' P. m2 O" E' \
- }
" j5 I- W, ^) v# y/ E9 U - }: @: W, X# K7 O2 v1 x$ p* r. r0 G5 K
- }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
3 t4 E7 R1 E4 ?9 V8 M! V2 Z0 t/ u下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){
. M( `) F" i5 B) ~/ m" K' _ - if( sqrt($i) <= 29){
2 K/ G( K. n/ r - goto a;
* q* `6 t m4 L% E% s$ f - }
: P% k( m" Q* p - echo “$i”;
' m8 C) }2 }7 ~8 C - }% W: v9 R4 U+ ?% L8 g+ |
- a:
2 ?) t. f- I6 N. b& W9 B: |. k - echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php# D- ~& ^6 s' i8 f. L) f" U v
- for($i = 1000;$i >= 1 ; $i– ){* u! Y" B) E* X! V. N; a
- if( sqrt($i) >= 29){
; F4 t% n `$ \; B - echo”$i \n<br/>”;
2 T2 Z) _* [8 L - }5 R9 A. h, A4 |4 U- ~% ]+ f
- else{
% J5 S* u# ~3 X, l" R - exit;
5 y$ X( l3 h/ w- }* @4 d; S6 ?0 F8 Z - }( B+ w& p' `4 |
- }% i8 @- ?3 {# y8 l' n
- echo”本行将不会被输出”;
. u; y. O: }7 ~, O" g$ U - ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php1 Q8 `' r. w; s# c
- for($i = 1000;$i >= 1 ; $i– ){! j8 D o9 I- D! t& g" Q- f; n+ T
- if( sqrt($i) >= 29){5 w# Q, E+ A7 r5 Q# }2 r
- echo”$i \n<br/>”;
% A: g; x" o8 D# C2 |7 D1 H - }
2 p- S" x- e" |" k - else{
$ _# p! Q; D' S0 @ - return; c/ Y# ]- h+ z1 T& M
- }- Y6 l' I: O; ~: k/ b0 N
- }
. D; _ F+ U9 H# P& l, E - echo”本行将不会被输出”;
. u9 g& M I) C3 O. H - ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;
$ \4 r) g. J* a j! Y; k - $s=1;! Y+ ^! A* }3 e: ]. E
- while($i==0)
$ N4 [/ ?% J0 i - { v( b) {: h- D: f& {9 D" z/ ]
- if($s==1)5 F$ `( C- f0 R% U% _
- {8 r, g8 q1 g; |0 i/ W
- $v=8;8 C1 }3 H i; A: [& {! w
- break;; D- w( h8 o/ }' r1 Y& g2 O& ^5 ?
- }% G* U R0 Z( M: I; Z
- $v=9;
$ u0 ^2 y5 Y+ G& N - }+ U/ I+ \* V& M) [
- , f# }7 {9 s% D( |/ e: i5 j
- echo $v;
复制代码 : d5 E( e8 M( X. x
9 n/ m6 N( A, l# V @ |