设计动量论坛's Archiver

ofly 发表于 2007-3-26 14:45

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

for语句可以说是PHP(同时也是多种语言)的循环控制部份最基本的一个语句了,for语句的执行规律和基础用法在这里就不多说,可以参见PHP手册for语句部分。PHP手册中对它的语法定义如下: D9s.])t e%B
for (expr1; expr2; expr3) rG8x ].xdi%U
statement ~u\ gl]m~

ixP c?2k ^   下面说说for语句几种有用的变型。 `kT W3R nS-l

~K2OqU;pp;s?4_ 1、无限循环 g7?A(VDrQ
  首先是人尽皆知的无限循环(亦可称“死循环”)。由于空表达式null在语法上是有效的,所以我们可以把for语句的三个表达式留空,这样就会产生不断执行for嵌套语句的效果。
;r4~`|:}l'T <?php
u{enW for (;;) {
w0s[ABfX}     //放置需要不断执行的语句
H-eg3{4Ck?5tUT } u&b0q`^Q
?> Z+J uMX0G
  虽然有一些任务会使用到无限循环,但是大多数程序任务,特别是PHP所能涉及的领域,在使用无限循环时都会添加一些终止循环的条件。
RaJ*F"`qPp <?php +a'j:RV2df7_9f
for (;;) { q Vr7v3cvv;Nk1t%s
    //如果是公元2199年,则跳出循环
Zk)k t'h5{:o5m     if (date(’Y’) == ’2199’) {
M@(Y7}6_V#@^8I;xFn         break;
6x/|(W2J0rAs     } \ y-kZ0v
}
^2fhW0q@6@y ?>
/E'sN4j{7nL H
7D(@8A'xQ4R 2、使用空表达式
u6KObX Uvj4gO   接下来就是说说在初始化语句expr1中使用null语法,留空expr1最常见的作用就是完成更为复杂的初始化工作。 %`B#K5DA"{"V9KBQ
<?php
6\a*UK A#l}e if (isset($i)) {
K2~ ?7f@D\)U&~     unset($i); p!N7rYVY'Dh
    if ((int) date(’’) < 2008) {
i }-of1f] ni         $i = 0; D)k5D"c3`6wPL
    } else { Z,qA k0|!dw
        $i = 1; E}(@+w"v,`6I~/S
    }
J:^ tJb } else {
| F Goh? V_*U!s     $i =3;
0is [Y C w6C } `%@ ?/Z%|;K
for (;$i < 10;$i++) { )t4Sz~\*W$y
    echo $i; 3|7Ty4t Z~U5d
}
'W]I*b q] T ?> v"\v"Yb"krXG3N
  同样道理,迭代表达式expr3也可能留空,也可以利用这点编写更为复杂的迭代式,比如说根据不同的条件调用不同的迭代式。 0q$v%{ci%DW$hg
  而for语句中的条件语句expr2留空则是上面所说的无限循环,当然也可以添加一些更为复杂的条件去判断什么时候跳出循环,在此不在重复。 ip7K2g*i^
*f t'kz;_|
3、多重循环 )N}-r;m+GJ/K6o-u
  使用多重循环来控制多个变量也是在for语句中使经常被忽略的一个特性。如下面的例子,在一般的任务中用到的一般会是双重循环,三重以上的循环一般意义不大。
i Q3f+c ozUn <?php
5qs6O$j3WQWo for ($i = 0, $j = 10;$i <= 10;$i++, $j--) { /J7S5Lp0M
    echo "$i + $j = 10"M![c^0_1B;JP
";
)LA6B]2v$e t } | S+T"x6iK
?>
^Y G Rr{ 以上代码将输出: 8O8Vv/Xj:Q:x+\X
0 + 10 = 10
gf Ay"xw b#FT 1 + 9 = 10 2h zDD)R
2 + 8 = 10 r:qf1qdY!U
3 + 7 = 10 z#o7|3|\ a
4 + 6 = 10
J;F8z c?6SQMi 5 + 5 = 10 ]`S"G1`+q:z
6 + 4 = 10
8}.\'~%A,QMdl 7 + 3 = 10
(kH h u ` 8 + 2 = 10
X D2]SL{?U)dJ"F[ 9 + 1 = 10 @F ze)N!c&t C
10 + 0 = 10
u[!J[ cz
`a/h+T/r8Q'r7S/B,o 4、更为复杂的表达式
sO9Rn9\3M$H5q   如果把for语句的三个表达式写得复杂一些,则可以用于优化算法。甚至可以使用没有循环体的for语句来完成一些任务。比如计算累加或阶乘:
\ h/B+dp${L~;qc <?php
(ig b.R7r //计算1-5的累加结果,斌值到$j Y9_Oy+mC-w
for ($i = 1,$j = 0; $i <= 5;$j += $i++); $OxtI,Ur#S z
echo $j; `e"gK{C
//计算1-5的阶乘结果,斌值到$j 4X;?"Z vf;J&z
for ($i = 1,$j = 1; $i <= 5;$j *= $i++);
d.Ec c1S%T6K echo $j; 8g(O W"~(Eba1hMF-|
?>   
/FO(hAx1y PHP借助了C语言的语法,一定程度上也会拥有C的特性,比如说强大的for循环语句就是一个典型的例子。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.