编程
您现在的位置:首页 >> 编程

PHP编程入门教程--流程控制

PHP的大部份语法继承了C语言的语法,因此在流程控制方面也是有着和C语言极类似的循环,PHP在流程分隔符号上,都是使用{开头,用}当作结尾,在每条指令结束时都要加上分号。

1、if..else循环

if..else循环有三种结构,只用到if条件、if加上else的条件、递归的if..elseif..else循环。

(1) 只用到if条件,当作单纯的判断。解释成"若发生了某事则怎样处理"。语法如下:

if(expr){

statement

}

其中的expr为判断的条件,通常都是用逻辑运算符号当判断的条件。而statement为符合条件的执行部分程序,若程序只有一行,可以省略大括号{}。下面是例子:

<?php

$d=date("D"); 

If ($d=="Sat") echo "周末了,狂欢去";//省略了大括号

if ($d!="Sat"){

echo "today is ";

echo $d;

}

?> 

if条件语句可以无限嵌套,所以 if条件语句很灵活,可以满足用户的多种需要。

(2) if加上else的条件,可解释成"若发生了某事则怎样处理,否则该如何解决"。语法如下

if(expr){

statement1

}else{

statement2

}

我们把上面的例子修改成if加上else的条件:

<?php

$d=date("D"); 

If ($d=="Sat") echo "周末了,狂欢去";

else {

echo "today is ".$d;

echo ",work hard!";

}

?>

(3) 递归的if..elseif..else循环,通常用在多种决策判断时。它将数个if..else拿来合并运用处理。

<?php

$a=6;

$b=8;

if($a>$b){

echo"a比b大";

}

elseif($a==$b){

echo"a等于b";

}

else{

echo"a比b小";

}

?>

上例用了二层的if..else循环,用来比较a和b两个变量。实际上这种递归if..else循环使用太多层的循环容易使设计的逻辑出问题,不建议使用,可以使用switch循环。

2、do..while循环

do..while可以分成两种模式。一种模式是只有while的循环,另外一种模式是do..while循环。

(1) 只有while的循环。是先判断再处理,用来在指定的条件内不断地重覆指定的步骤。语法如下

while(expr){

statement

}

其中的expr为判断的条件,通常都是用逻辑运算符号当判断的条件。而statement为符合条件的执行部分程序,若程序只有一行,可以省略大括号{}。下面是例子:

<?php

$i=1;

While ($i<=10){

print $i++;

echo".以后不敢了<br>\n";//在浏览器出现十次"以后不敢了"的字符串,并在前面加上数字。

}

?>

while可以不用大括号来包住执行部分,而使用endwhile结束循环。下面是例子:

<?php

$i=1;

while($i<=10):

print $i++;

echo".以后不敢了<br>\n";

endwhile;

?>

(2)do..while循环,和 while 语句基本是一样的。不同点是,while 语句在“{}” 内的语句执行之前检查条件是否满足,而 do...while 语句则是先执行“{}”内的语句,然后才判断条件是否满足,如果满足就继续循环,不满足就跳出,也就是说循环至少执行一次。do...while 语句语法如下:

do{

statement

}while(expr);

下面是例子:

<?php

$a=0;

do{

echo "循环".++$a;

}while($a>5);

?>

可以看到循环至少执行一次。

3、for循环

for循环的语法如下:

for(expr1;expr2;expr3){

statement

}

其中的expr1为条件赋初始值,expr2为判断的条件,expr3用来改变条件,供下次的循环判断,statement为符合条件的执行部分程序,若程序只有一行,可以省略大括号{}。

程序执行到 for 语句时,首先执行expr1,然后是expr2这个判断语句,如果判断为真,则执行循环体,循环体执行完成后执行 expr3。如果这时expr2为真,则再次执行循环体,重复上述的步骤,否则就停止。

下例是用for循环写的"以后不敢了"的例子,可以拿来和用while循环的比较。

<?php

for($i=1;$i<=10;$i++){

echo"$i.以后不敢了<br>\n";

}

?>

实际应用上,若循环有初始值,且都要累加(或累减),例如将资料从数据库取出,可能使用for循环比使用while循环适合。

PHP4.0 及其以上版本中也有一个用来遍历数组的控制结构foreach,语法如下:

第一种形式

foreach(array_expression as $value) 

statement 

第二种形式

foreach(array_expression as $key=>$value) 

statement

在第一种形式下,每次执行foreach 时,会自动指向数组array_expression的第 1 个元素,并把值赋给变量$value,然后指向下面一个数组元素以便再次调用时得到下面一个元素的值。

第二种形式和第一种形式类似,不同的是调用时数组元素的关键字会被赋给变量$key。第二种形式更 常用一些。实例如下:

<?php

$a=array(1,2,3,17);

foreach($a as $v){

echo "\$a当前值为:$v <br>\n";

}

?>

关键字和值同时获取实例如下:

<?php

$a=array("one"=>1,"two"=>2,"three"=>3,"seventeen"=>17);

foreach($a as $k=>$v){

echo "\$a[$k]=>$v<br>\n";

}

?>

4、switch循环

switch循环通常处理复合式的条件判断,每个子条件都是case指令部分。在实作上若使用许多类似的if指令,可以将它综合成switch循环。

语法如下

switch(expr){

case expr1:

statement1;

break;

case expr2:

statement2;

break;

……

default:

statementN;

break;

}

其中的expr条件通常为变量名称,而case后的exprN通常表示变量值,注意要用break跳离循环。

弄清楚 switch 语句的具体执行过程是非常有必要的。switch开始时并不执行什么语句,首先根据变量得到一个值,然后根据这个值来决定执行什么语句。

例如:

<?php

switch(date("D")){

case"Mon":

echo"今天星期一";

break;

case"Tue":

echo"今天星期二";

break;

case"Wed":

echo"今天星期三";

break;

case"Thu":

echo"今天星期四";

break;

case"Fri":

echo"今天星期五";

break;

default:

echo"今天放假";

break;

}

?>

用 switch 语句可以避免大量地使用 if...else 控制语句。很明显的,上述例子用if循环就很麻烦了。当然在设计时,要将出现机率最大的条件放在最前面,最少出现的条件放在最后面,可以增加程序的执行效率。上例由于每天出现的机率相同,所以不用注意条件的顺序。