introduction

循环简介

循环是计算机最擅长的事儿了,它可以按照一定的条件,重复执行某一块代码,直至条件满足。极大地减少了我们的工作量。

在 PHP 中,常见的循环语句有 whiledo-whileforforeach 四种循环,本篇教程将会逐个讲解它们的用法。

另外需要注意的是,大部分语言中的循环结构都需要一个跳出条件,不然会造成死循环使服务宕掉。所谓的跳出条件是指:再循环体内不断的改变某一个值,并且这个值在循环执行的条件中。新手一定要注意!

while 语句

while 循环是 PHP 中最简单的循环类型。它和 C 语言中的 while 表现的一样,他需要一个布尔型的执行条件,从真开始不断的执行,直到条件为假后跳出循环。 它经常被用于控制循环次数未知的循环结构。 如下图所示:

while 语句

while 有两种写法,假如我想要程序输出从 1 到 10 的所有数字,最常见的是这种:


// 简单声明
$i = 1;
while ($i <= 10)
	echo $i++;
		

第二种写法和 if 语句一样,可以在 while 循环中用花括号括起一个语句组,或者用替代语法:


// 使用花括号
$i = 1;
while ($i <= 10) {
	echo $i++;
}
// 使用替代语法
$i = 1;
while ($i <= 10):
    print $i;
    $i++;
endwhile;
		

以上三个代码示例都会输出: 12345678910

while 语句的含意很简单,它告诉 PHP 只要 while 表达式的值为 TRUE 就重复执行嵌套中的循环语句。表达式的值在 每次开始 循环时检查,所以即使这个值在循环语句中改变了,语句也不会停止执行,直到本次循环结束。有时候如果 while 表达式的值一开始就是 FALSE,则循环语句 一次都不会执行

do-while 语句

do...while 循环和 while 循环非常相似,区别在于 do...while 不管条件是真是假,一定会执行一次循环体。而 while 语句中,如果条件为假,就 一次都不会执行

do-while 语句

还是沿用上一个示例,我想用 do...while 语句输出从 1 到 10 的数字,那么应该这么写:


$i = 1;
do {
	echo $i++;
} while ($i <= 10);
		

在现实工作中,do ... while 语句使用的频率比较低,但是面试时会拿它的特性来考你。你只需要记住,do ... while 会先执行一次循环体,再判断条件的真假。

for 语句

for 循环是 PHP 中最复杂的循环结构,有 JavaScript 或 C 语言的基础的同学学起来会很快,因为它的语法和 PHP 基本一致。

与前面所介绍的两种循环结构不同,for 循环需要知道具体的循环次数,而 while 体系是遇到特定的条件才会停止循环。虽然复杂,但是是最常用的循环。再拿循环输出 1 到 10 的例子来说,用 for 循环这样写:


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

可以看到在 for 循环后面的括号中有三个条件表达式:第一个表达式 $i=1;在循环开始前无条件求值(并执行)一次。紧随其后的 $i <= 10; 是在每次循环开始前求值。如果值为 TRUE,则继续循环,执行嵌套的循环语句。如果值为 FALSE,则终止循环。第三个 $i++ 在每次循环之后被求值(并执行)。

为了更直观的表示上面的叙述,我用代码来演示一遍。首先,把第二个参数单独提出:


for ($i = 1; ; $i++) {
    if ($i > 10) {
        break;
    }
    echo $i;
}
		

这么书写是不会报错的哟,虽然条件可以改,但是 ; 不可以省略。上面这个例子将循环的跳出条件提取出来,写入循环体。 break 是跳出循环体的循环控制语句,在接下来的课程中会详细介绍,看不懂没有关系,在这里只算了解 for 循环的运行流程。

你甚至可以把所有循环条件从括号里都提取出来,写成这样:


$i = 1;
for (;;) {
    if ($i > 10) {
        break;
    }
    echo $i;
    $i++;
}
		

这么写看起来是不是有点 while 循环的影子了?注意看第 7 行高亮的部分,它的增长一直在控制这个循环不会变为死循环,也就是括号里第三个条件表达式。而在第 3 行的语句会在每一次循环时判断是否满足跳出条件。

如果我想在 for 循环里声明多个语句来计算变量,需要用 , 将他们分隔开,防止每次循环都会重新运算。比如,我想用 for 循环一个数组,但是每次都需要计算数组的数量,那么我们可以这样写:


// 原始的写法:
$people = Array(
        Array('name' => 'Kalle', 'salt' => 856412),
        Array('name' => 'Pierre', 'salt' => 215863)
        );

for($i = 0; $i < count($people); ++$i)
{
    $people[$i]['salt'] = rand(000000, 999999);
}
// 声明多个参数的写法:
$people = Array(
        Array('name' => 'Kalle', 'salt' => 856412),
        Array('name' => 'Pierre', 'salt' => 215863)
        );

for($i = 0, $size = count($people); $i < $size; ++$i)
{
    $people[$i]['salt'] = rand(000000, 999999);
}
		

foreach 语句

foreach 是专门为数组提供的遍历方法。由于我们还没有讲到数组的概念,所以在这里只是简单介绍一下,最详细具体的用法请参照数组的遍历一节。

foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法:


foreach (array_expression as $value)
    statement
		

这种格式的 foreach 会遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。


foreach (array_expression as $key => $value)
    statement
		

第二种遍历和上面的示例做了同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key

请登录

WOWPHP 账号登录 GitHub 账号登录

还没有账号?现在去注册一个~