PHP课程 - 第12课 - 循环语句 while、foreach、for
在编程中,乃至在生活中,我们经常会遇到需要重复执行某些操作直到获得满意结果的情况。在生活里我们可能称之为“折磨”,而在编程中它被称为循环(loop)。循环在 PHP 中非常常见,它是遍历数组、计算函数以及执行各种重复任务的便利方式。我们先从最简单、最常用的 while 循环开始学习。
PHP while 循环
while
循环非常简单。括号中写条件,花括号中写当条件成立时要执行的代码。条件是一个逻辑表达式,它的结果要么是 TRUE,要么是 FALSE。如果你还不熟悉逻辑表达式,可以回顾一下关于 if
运算符的课程。下面是一个简单的 while
示例:
<?php $counter = 5; $newArray = array(); while($counter > 2){ $newArray[]= $counter; $counter--; } print_r($newArray); ?>
执行结果为数组中的元素:5, 4, 3。让我们分步看看是怎么发生的:
第1步:$counter = 5 (5 > 2)
第2步:$counter = 4 (4 > 2)
第3步:$counter = 3 (3 > 2)
第4步:$counter = 2 (2 = 2,条件不再成立,因此循环结束,数组中没有 2)
再来看一个例子,对函数 y(x) = 2x - 1 进行制表计算:
<?php // 函数 y(x) = 2x -1; $x = -10; while($x <= 10){ $y = 2*$x-1; print 'y(' . $x . ')=' . $y . '<br />'; $x++; } ?>
结果会按列显示函数在 x ∈ [-10,10] 时的取值。
上图是 while 循环的流程图。可以看到它的工作原理:当条件为真时,循环体中的代码执行;当条件为假时,循环结束,程序继续执行后续代码。
一个非常重要的提醒: 如果你删除了 $x++
这一行,使得计数器不再变化,那么条件将永远为真。那会发生什么呢?
<?php // 函数 y(x) = 2x -1; $x = -10; while($x <= 10){ $y = 2*$x-1; print 'y(' . $x . ')=' . $y . '<br />'; // $x++; } ?>
这时程序会出现严重问题 —— 循环将永远执行下去,这种情况称为死循环(infinite loop)。一定要避免死循环,否则会导致网站崩溃或服务器卡死!
PHP foreach 循环
foreach
是另一个非常重要的循环结构,它通常用于遍历数组。所谓“遍历”,就是依次取出数组的每一个元素,对其执行相同的操作,直到处理完所有元素。
来看一个例子:假设我们有 10 个元素,分别为“红色”和“蓝色”,我们要统计其中红色元素的数量:
<?php $counter = 0; $newArray =array( 1=>'红色', 2=>'蓝色', 3=>'蓝色', 4=>'红色', 5=>'红色', 6=>'蓝色', 7=>'红色', 8=>'蓝色', 9=>'红色', 10=>'蓝色', ); foreach($newArray as $key){ if($key == '红色'){ $counter++; } } print '我们共有 ' . $counter . ' 个红色元素'; ?>
这个例子非常直观。关键字 as
用于依次取出数组中的每个元素。当所有元素都处理完时,循环就结束。
但数组有时并不那么简单,可能包含多个嵌套的子数组。这种情况下我们可以使用嵌套的 foreach
:
<?php $counter = 0; $newArray = array( 1=>array( 1 => '红色', 2 => '蓝色', 3 => '蓝色', ), 2=>array( 1 => '红色', 2 => '红色', 3 => '蓝色', ) ); foreach($newArray as $key){ foreach($key as $element){ if($element == '红色'){ $counter++; } } } print '我们共有 ' . $counter . ' 个红色元素'; ?>
通过这种方式,我们可以轻松统计嵌套数组中的数据。关于 foreach
我们暂时学到这里,之后的课程中还会多次用到。
PHP for 循环
for
循环与 while
循环类似,但通常用于已知循环次数的情况,例如循环 10 次或 100 次。
for($i=0;$i<10;$i++){ // 执行 10 次 }
我们来逐步解析 for
循环的结构:
for(){ }
与其他循环一样,参数写在括号内,通常有三个部分:
- $i = 0 —— 初始化计数器变量,记录当前循环次数。
- $i < 10 —— 循环执行的条件。
- $i++ —— 每次循环后计数器加 1,用于控制循环次数。
通过这种方式,我们可以方便地执行固定次数的循环,非常适用于计数、生成序列、批量输出等场景。