PHP while 循环
最后修改于 2025 年 4 月 16 日
PHP 的 while 循环会重复执行一段代码块,只要指定的条件为真。它对于执行重复性任务和处理数据直到满足某个条件至关重要。While 循环是 PHP 中迭代操作的必备工具。
基本定义
while 循环在每次迭代之前都会检查一个条件。如果条件评估为真,则执行代码块。循环会一直持续到条件变为假。
语法:while (condition) { code }。条件是任何返回布尔值的表达式。如果条件永远不会变为假,循环将无限运行。
与 for 循环不同,while 循环没有内置的初始化或递增步骤。这些必须在循环之前和循环内手动处理。
基本 while 循环
这个例子演示了一个简单的 while 循环,从 1 计数到 5。
<?php
declare(strict_types=1);
$count = 1;
while ($count <= 5) {
echo "Count: $count\n";
$count++;
}
代码将 $count 初始化为 1。循环在计数为 5 或更少时运行。每次迭代都会打印当前的计数并将其递增。当计数达到 6 时,循环结束。这显示了基本的 while 循环结构。
带中断的无限循环
此示例显示了一个带有条件中断的有意无限循环。
<?php
declare(strict_types=1);
$value = 0;
while (true) {
echo "Processing...\n";
$value += 10;
if ($value >= 50) {
break;
}
}
循环条件始终为真,从而创建一个无限循环。在内部,我们每次迭代将 $value 增加 10。当 value 达到 50 时,break 语句退出循环。这种模式对于轮询很有用。
逐行读取文件
此示例演示了使用 while 逐行读取文件。
<?php
declare(strict_types=1);
$file = fopen("data.txt", "r");
while ($line = fgets($file)) {
echo "Line: $line";
}
fclose($file);
代码打开一个文件用于读取。只要 fgets 返回一行,while 循环就会继续。每次迭代读取并打印一行。当到达 EOF 时,循环停止。在处理完成后,始终关闭文件。
数组处理
此示例演示了如何使用 while 循环处理数组元素。
<?php
declare(strict_types=1);
$fruits = ["Apple", "Banana", "Cherry"];
$index = 0;
while ($index < count($fruits)) {
echo "Fruit {$index}: {$fruits[$index]}\n";
$index++;
}
代码初始化一个数组和计数器。循环在索引小于数组长度时运行。每次迭代访问一个数组元素。索引是手动递增的。这是 foreach 循环处理数组的替代方案。
嵌套 while 循环
此示例演示了用于多维处理的嵌套 while 循环。
<?php
declare(strict_types=1);
$row = 1;
while ($row <= 3) {
$col = 1;
while ($col <= 3) {
echo "($row,$col) ";
$col++;
}
echo "\n";
$row++;
}
外层循环控制行,内层循环控制列。两个循环都有自己的计数器。内层循环在每次外层循环迭代时完全完成。这会创建一个 3x3 的网格输出。嵌套循环功能强大,但可能很复杂。
数据库记录处理
此示例显示了使用 while 循环处理数据库记录。
<?php
declare(strict_types=1);
$conn = mysqli_connect("localhost", "user", "pass", "db");
$result = mysqli_query($conn, "SELECT * FROM products");
while ($row = mysqli_fetch_assoc($result)) {
echo "Product: {$row['name']}, Price: {$row['price']}\n";
}
mysqli_close($conn);
代码连接到数据库并查询产品。while 循环处理每一行,直到没有更多行为止。当完成后,mysqli_fetch_assoc 返回 null。这是数据库操作的常见模式。完成后,始终关闭连接。
带逻辑运算符的条件
此示例演示了带有逻辑运算符的复杂条件。
<?php
declare(strict_types=1);
$attempts = 0;
$success = false;
while ($attempts < 5 && !$success) {
echo "Attempt #" . ($attempts + 1) . "\n";
$success = (rand(1, 10) > 8);
$attempts++;
}
echo $success ? "Success!" : "Failed after 5 attempts.";
循环在尝试次数小于 5 且成功为 false 时运行。每次迭代模拟一个具有随机成功率的操作。该条件将两个检查与 && (AND) 组合在一起。如果任一条件失败,循环将退出。这显示了复杂的循环控制逻辑。
最佳实践
- 初始化: 确保循环变量已正确初始化。
- 终止: 保证循环条件最终会变为 false。
- 复杂性: 为了可读性,避免过于复杂的条件。
- 性能: 将不变的计算移到循环之外。
- 安全: 考虑添加最大迭代限制以确保安全。
来源
本教程介绍了 PHP while 循环,并提供了实际示例,展示了基本用法、文件处理、数据库操作和复杂条件。
作者
列出 所有 PHP 教程。