PHP 零基础教程

PHP for 循环

for 循环提供了一种结构化的方式,用于将一段代码块执行特定次数。当我们在编写代码前就已经提前知道需要循环多少次时,它特别有用,能让你精确控制任务重复的节奏。

与我们前面学过的 whiledo-while 循环(它们更依赖于某个业务条件何时达成)不同,for 循环直接将其自身的初始化、条件判断和递增/递减步进这三个核心步骤,清晰地定义在了它的语法结构内部。

1. 剖析 for 循环的语法

PHP 中 for 循环的基本结构由圆括号内用分号隔开的三个表达式组成,紧接着是要执行的代码块。

for (初始化; 条件; 递增/递减) {
    // 每次迭代都要执行的代码
}

让我们逐一拆解:

  • 初始化 (Initialization): 这个表达式只在循环开始时执行一次。它通常用于声明和初始化一个循环计数器变量。
// 示例:将计数器变量 $i 初始化为 0
for ($i = 0; /* ... */) { }

条件 (Condition): 这个表达式在每次迭代开始前都会被评估。如果条件计算为 true,循环就继续执行代码块。如果为 false,循环就会立即终止。

// 示例:只要 $i 小于 5,循环就继续
for (/* ... */; $i < 5; /* ... */) { }

递增/递减 (Increment/Decrement): 这个表达式在每次迭代结束时(即代码块运行完毕后)执行。它通常用于更新循环计数器变量,使其一步步逼近终止条件。

// 示例:每次迭代后将 $i 加 1
for (/* ... */; /* ... */; $i++) { }

1.1 基础 for 循环示例

假设你需要显示数字 1 到 5。for 循环是完成此任务最理想的控制结构。

<?php
for ($i = 1; $i <= 5; $i++) {
    echo "当前数字是:" . $i . "<br>";
}
?>

在这个例子中:

  • $i = 1 将计数器 $i 初始化为 1
  • $i <= 5 是条件。只要 $i 小于或等于 5,循环就会继续。
  • $i++ 在每次迭代后将 $i 递增 1

输出结果:

当前数字是:1
当前数字是:2
当前数字是:3
当前数字是:4
当前数字是:5

2. for 循环的高级进阶场景

虽然基本结构很直接,但 for 循环提供了极高的灵活性。

2.1 多个初始化或步进表达式

你可以通过逗号分隔,在一个 for 循环中包含多个初始化或递增/递减表达式。

<?php
// 示例:同时使用两个计数器变量
for ($i = 0, $j = 10; $i < 5; $i++, $j--) {
    echo "i 的值:" . $i . ",j 的值:" . $j . "<br>";
}
?>

在这里,$i$j 同时被初始化。在每次迭代中,$i 递增而 $j 递减。

输出结果:

i 的值:0,j 的值:10
i 的值:1,j 的值:9
i 的值:2,j 的值:8
i 的值:3,j 的值:7
i 的值:4,j 的值:6

2.2 省略表达式

for 循环语法中的三个表达式任何一个都可以省略,但分隔它们的分号 ; 必须保留。如果省略了“条件”表达式,它默认被视为 true,这将创建一个无限循环(除非你在代码块内部使用我们以后会讲的 break 语句来终止它)。

<?php
// 示例:省略初始化和步进表达式
$k = 1; // 在循环外部初始化

for (; $k <= 3;) { // 循环内部只有条件表达式
    echo "步骤:" . $k . "<br>";
    $k++; // 把步进逻辑移到了循环体内部
}
?>

这证明了,虽然 for 循环是为固定迭代设计的,但它的各个组件也可以像 while 循环那样,在外部或循环体内部进行管理。然而,对于固定次数的迭代,为了代码的清晰度和可读性,最佳实践是将所有三个组件都保留在 for 循环的圆括号内

3. 实战案例与演示

3.1 计算阶乘 (Factorial)

让我们使用 for 循环来计算一个数字的阶乘(例如 5!,即 5 的阶乘,计算方法是 5 * 4 * 3 * 2 * 1)。

<?php
$number = 5;
$factorial = 1; // 将阶乘初始化为 1,因为乘以 0 结果永远是 0

// 从 $number 开始倒数递减循环,直到 1
for ($i = $number; $i >= 1; $i--) {
    $factorial *= $i; // 等同于 $factorial = $factorial * $i;
    echo "当前乘以:" . $i . ",目前阶乘结果:" . $factorial . "<br>";
}

echo $number . " 的阶乘是:" . $factorial . "<br>";
?>

输出结果:

当前乘以:5,目前阶乘结果:5
当前乘以:4,目前阶乘结果:20
当前乘以:3,目前阶乘结果:60
当前乘以:2,目前阶乘结果:120
当前乘以:1,目前阶乘结果:120
5 的阶乘是:120

3.2 动态生成 HTML 表格

for 循环非常适合用来生成重复的 HTML 结构,比如表格中的行和列。

<?php
echo "<table border='1' style='border-collapse: collapse; text-align: center;'>";
echo "<thead><tr><th style='padding: 5px;'>行号</th><th style='padding: 5px;'>平方值</th></tr></thead>";
echo "<tbody>";

// 循环生成 10 行表格数据
for ($row = 1; $row <= 10; $row++) {
    $square = $row * $row;
    echo "<tr>";
    echo "<td style='padding: 5px;'>第 " . $row . " 行</td>";
    echo "<td style='padding: 5px;'>" . $square . "</td>";
    echo "</tr>";
}

echo "</tbody>";
echo "</table>";
?>

这段代码片段生成了一个包含两列(“行号”和“平方值”)的简单 HTML 表格。for 循环迭代 10 次,每次都会创建新的一行 <tr> 和两个单元格 <td>