PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:( I$ G9 h) S( q; z; J/ ^
- <?php
9 W" J# _* E) l4 d -
8 x; B; W. L- a. n, ?9 ^" E - $i = 1;
5 m5 }* P% V9 P* }2 H - while (true) { // 这里看上去这个循环会一直执行
0 v1 U ^! S0 r9 k5 }; v8 K' T - if ($i==2){// 2跳过不显示+ V: t5 r3 }1 B* @- B8 B2 h9 e
- $i++;
5 \4 u5 g) ?3 C" w9 [8 i- n+ [* P8 c - continue;" L9 p' ]. W' W
- } else if($i==5) {// 但到这里$i=5就跳出循循环了; @5 O- S$ E$ T& x
- break;3 Z( v }( v; d
- } else{
6 D" K/ a4 d* q5 F# m8 J7 s# y - echo $i . '<br>';
3 }8 o! _% ]) l4 X3 h - }
' X# A9 ]+ P% f ]9 H - $i++;/ ~8 O+ R2 A& Q1 @8 P& Z) o/ e& q
- }
$ ?" H' X+ W% V7 X - exit;! _, v( {* K4 z
- / A$ z& H% q1 B& ]( _
- echo'这里不输出';4 K" {2 P9 [# Z- z( b! S
- ?>
) E# z, {/ Z7 ?* s2 z9 o -
7 u- |# o7 q% m+ q2 e - 结果:
6 C/ c V9 [ i& X$ D8 A - : n2 i A ?9 D0 z$ {
- 1/ L: u4 B( N4 B- j1 z2 c
- 3
0 c0 c1 Z: K+ w2 k- r - 4
复制代码 continue
' }- X6 R0 I8 E, hcontinue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。 例如在下面的这段PHP代码片段中: - <?php
/ N" c6 Z: G$ F( P - for($i = 1;$i <= 100; $i++ ){
6 u( } O" D) m4 H% j4 }/ i3 | - if($i % 3 == 0 || $i % 7 == 0){
* b% n/ P: i1 P4 i Y1 N( _4 o - continue;
9 I8 B$ L4 E0 N' e, k" k - }# a! |* [' F+ Q: t
- & #160; else{
5 c, m% h, s) F7 N9 ^ - echo”$i \n<br/>”;9 g1 J1 ~) g: @& w& i k5 g
- }3 }' p, u4 E* ^' G# h6 G6 v# D
- }
' @; q: j- m; E { - ?>
复制代码PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。 break break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。 看下面这个多重循环嵌套的例子: - for($i = 1;$i <= 10; $i++ ){
9 o4 C$ T% I) S9 d8 P - for($j = 1;$j <= 10;$j++){( p' k- b4 y. f, {5 P- } `( w
- $m = $i * $i + $j * $j;* W, ~8 @- z f2 D, [) m2 e
- echo”$m \n<br/>”;
+ z+ M- _4 l7 v% }/ I& `6 L8 M - if($m < 90 || $m > 190) {
0 j" n, t& l' E& G - break 2;
4 H, t, Z% {2 k - }
7 `# z$ J7 D; e7 r8 ~6 w - }
" [" H; b m7 H2 ^ I3 z; c. ?% a0 G - }
复制代码这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。 goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。, a; D6 c Z+ t6 t9 G- o9 Q; F* S# l
下面的是一个使用了goto跳出循环的例子 - for($i = 1000;$i >= 1 ; $i– ){
% b, R6 `* _8 \0 R& [ - if( sqrt($i) <= 29){
0 G3 l4 J; ]. I3 [ - goto a;
+ R7 f- [$ Y& q - }/ z7 `4 P" ^5 W& d& o3 f4 R* M
- echo “$i”;
1 p4 W. }1 @* o6 T - }
; j# j$ w4 L' k( H$ K - a:
U I( m" m! E8 K; H I( _, V! l. ~ - echo” this is the end”;
复制代码例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。 exit exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。 - <?php" z8 j# `% c& N& l( n% l' Z
- for($i = 1000;$i >= 1 ; $i– ){
: f% W P$ [! p# k - if( sqrt($i) >= 29){
2 L* Q; W1 m% E3 O4 ` - echo”$i \n<br/>”;$ a# G! B: Y+ O" O, S& o) r8 J2 C
- }
% g4 x8 r3 S) c3 Z. M g - else{
5 X* p$ Q$ M+ w8 @7 r f - exit;
& J! ]' A# l4 F' l% h0 P7 G$ z) ` - }
" y# ^3 t3 z- E, A6 A0 D0 ~ - }3 {. Q% {) S7 U
- echo”本行将不会被输出”;
; s$ D7 ]5 z: I/ E. \& @: ?3 ] - ?>
复制代码上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web页面里面,甚至连exit后面的html代码都不会被输出。 return return语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行 - <?php
' ^+ N. \# t* x/ B+ h1 R - for($i = 1000;$i >= 1 ; $i– ){+ i' ^7 D7 e" E, |
- if( sqrt($i) >= 29){
3 k; g2 ^/ Y6 n1 L: f - echo”$i \n<br/>”;
' K& [3 @' b3 Q: L - }
. @6 M" t* P% X: k/ \9 L - else{
* h! ~' H. B/ V5 ^ - return;
& }* d" p. i% r* S; A - }/ i1 \& V4 Y. Q( J0 M
- }6 {# C O- U; S- U0 V
- echo”本行将不会被输出”;) K {6 u8 p. M
- ?>
复制代码这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。 if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中 - $i=0;, _& O1 a3 r8 \
- $s=1;- _) V9 @1 k% v) C
- while($i==0)' O$ [3 Y3 j" m. j
- {8 A# b7 w8 {& M
- if($s==1)6 V7 Z0 P6 d; M
- {
9 K/ i2 _7 B+ t" _# B' x& T' t - $v=8;" u* L8 O# v ~) y* J& ~0 \
- break;: v& ?9 Y/ J) o" |9 |) T
- }4 y1 Y j2 M% S6 r* D" \# P
- $v=9;
2 K2 ^$ E9 u& b5 G+ L - }
& ^ d' z& C) U, M0 }1 O% `4 I - & C$ @3 a! B2 p7 q6 U6 A2 L
- echo $v;
复制代码
4 x8 K6 s# U7 s z- L8 X4 m( ?! J* N8 ]* f. m8 c* P+ {* J/ a
|