发新话题
打印

[编程代码] PHP中for循环语句的几种变型

PHP中for循环语句的几种变型

for语句可以说是PHP(同时也是多种语言)的循环控制部份最基本的一个语句了,for语句的执行规律和基础用法在这里就不多说,可以参见PHP手册for语句部分。PHP手册中对它的语法定义如下: 4 t2 I0 z" g/ y( p
for (expr1; expr2; expr3) 4 H$ N. x. y) Q" J# ~( I
statement & q1 ?5 `+ ^1 e; O# v7 B% R6 _) V
# O8 y3 s& c4 v) h3 V
  下面说说for语句几种有用的变型。
7 d7 q5 E- ~6 Y9 Y8 J
* o8 i0 a; K- I% H) |, o6 s1、无限循环 + K8 O- k4 ^* B9 w4 [
  首先是人尽皆知的无限循环(亦可称“死循环”)。由于空表达式null在语法上是有效的,所以我们可以把for语句的三个表达式留空,这样就会产生不断执行for嵌套语句的效果。
$ V( ~: o4 N% P9 c; V<?php $ c( i9 A2 z+ X8 ^) Z5 \
for (;;) {
) t) s3 {6 X; d2 H    //放置需要不断执行的语句
: h" @7 `  T$ j6 _}
: q  m! }2 D! }8 p+ k6 v: f?> % V; W) j' B1 `2 k) T
  虽然有一些任务会使用到无限循环,但是大多数程序任务,特别是PHP所能涉及的领域,在使用无限循环时都会添加一些终止循环的条件。 7 o7 o: r8 m. L* v3 _- v6 R
<?php $ \3 O. t/ F# s, ?% y
for (;;) { : X( \  H4 {5 t5 H
    //如果是公元2199年,则跳出循环
( q" p! X; D; z. Z6 ^    if (date(’Y’) == ’2199’) {
) P  F) X  y& n/ r        break;
! K/ b* X1 k4 I6 m0 z9 O! F! ^    } ' w' P+ N+ p( @7 g- E
} & p5 ~9 K% O. w
?>
/ F9 D/ H3 i9 y7 p7 J% d  i3 q% H. z+ q, L
2、使用空表达式
0 t& A* X8 C1 h$ r! k% _6 t' q# [  接下来就是说说在初始化语句expr1中使用null语法,留空expr1最常见的作用就是完成更为复杂的初始化工作。
, K6 Y; J5 U6 ?) |+ p- `3 J<?php
1 J0 ]1 E- r: j% x  f3 R  Oif (isset($i)) {
, B; H6 h5 T/ D6 P" ]7 {" [    unset($i);
; M! t7 W' c% f4 i2 Y7 D0 j    if ((int) date(’’) < 2008) { 5 d  {$ [7 F' j- k
        $i = 0;
; g# [( \+ S% P$ y    } else {
  |0 H2 k- k' X# g        $i = 1;
- m, C4 a$ m6 A    }
7 k8 w% z  Y* {' X; ?; q) u  N  V} else {
/ o* G7 t& g) k" s2 W    $i =3;   S8 ]3 I8 p: n" Y5 I4 c
} + y/ W8 t" {, I# j/ n3 u3 O% y
for (;$i < 10;$i++) {
6 x) ]+ z# e7 h" Y1 q* |    echo $i;
: X; Q3 k' U+ [5 S) Y5 O. ~} : U* u: x% W2 v- V' C
?>   y8 l( I" G$ H& s; z# a6 e
  同样道理,迭代表达式expr3也可能留空,也可以利用这点编写更为复杂的迭代式,比如说根据不同的条件调用不同的迭代式。
9 e5 w5 L* a6 D2 m2 }& m, T) o- m* q  而for语句中的条件语句expr2留空则是上面所说的无限循环,当然也可以添加一些更为复杂的条件去判断什么时候跳出循环,在此不在重复。 " L- L8 H0 a) h; }6 L& B

+ g6 }; c1 j: \5 X0 Q% D3、多重循环 7 f+ ^" R  V" j! F% N  k! v7 k
  使用多重循环来控制多个变量也是在for语句中使经常被忽略的一个特性。如下面的例子,在一般的任务中用到的一般会是双重循环,三重以上的循环一般意义不大。 * R" s/ @% @0 p4 d, F8 i
<?php ' e- H3 x: U7 b/ R- i* P, r5 g
for ($i = 0, $j = 10;$i <= 10;$i++, $j--) { 2 H! X$ D# V% J1 @& Z! ~
    echo "$i + $j = 109 ]; R  R# q. B" D2 G& o
"; 5 ]" [2 K" ?* H9 k! U; E5 ^/ y
} 2 W% K1 T6 E3 Z  n5 {' y3 M: y
?>
9 S2 u; O% j; N以上代码将输出: " P4 z; X" L6 N* I* r
0 + 10 = 10 $ _* V- _( H3 X2 {& B5 U
1 + 9 = 10
. d' ], e( d* k2 + 8 = 10 : u+ h. \+ J7 a7 M. A6 [# R% h
3 + 7 = 10 % s* z- z( L9 l4 m& F" @+ Q
4 + 6 = 10 5 L8 t1 l7 }$ a6 B" J2 p4 u2 i
5 + 5 = 10 " E3 Z# b* H( d+ p( Q8 }3 s
6 + 4 = 10
. w" J( ?5 m, _+ o' J9 ]7 + 3 = 10 8 W  J1 O& Y- l1 B
8 + 2 = 10 9 G4 q- L! X2 W5 q  Z( N' G# K1 |5 R- u5 P3 M
9 + 1 = 10 + q/ B# C( e( b' Z& o; F
10 + 0 = 10
8 h5 h! k4 @: v: ~8 O% h5 M
% J8 d# f# G; p0 a- s* q4、更为复杂的表达式
5 e9 r9 L4 ?+ O/ x$ D) @0 G8 w  如果把for语句的三个表达式写得复杂一些,则可以用于优化算法。甚至可以使用没有循环体的for语句来完成一些任务。比如计算累加或阶乘:
' d4 W+ q/ ^% k$ U4 ?. {<?php
' i/ a$ N3 X) D- w9 K//计算1-5的累加结果,斌值到$j . }8 Y! r/ o" p3 [3 V
for ($i = 1,$j = 0; $i <= 5;$j += $i++);
' Q1 Q7 i5 T5 ?* ]4 l8 A# Qecho $j; / n( R( x# |7 e+ F
//计算1-5的阶乘结果,斌值到$j
) g! j" q* b7 E3 e, N3 n  k# mfor ($i = 1,$j = 1; $i <= 5;$j *= $i++);
2 v8 x3 u# e" x* I; c0 Z! Oecho $j;
5 K) s  R% g9 y8 i6 X2 B0 ^?>   ; P+ _' x8 ~8 x; J( w
PHP借助了C语言的语法,一定程度上也会拥有C的特性,比如说强大的for循环语句就是一个典型的例子。
发新话题