ZetCode

PHP while 循环

最后修改于 2025 年 4 月 16 日

PHP 的 while 循环会重复执行一段代码块,只要指定的条件为真。它对于执行重复性任务和处理数据直到满足某个条件至关重要。While 循环是 PHP 中迭代操作的必备工具。

基本定义

while 循环在每次迭代之前都会检查一个条件。如果条件评估为真,则执行代码块。循环会一直持续到条件变为假。

语法:while (condition) { code }。条件是任何返回布尔值的表达式。如果条件永远不会变为假,循环将无限运行。

与 for 循环不同,while 循环没有内置的初始化或递增步骤。这些必须在循环之前和循环内手动处理。

基本 while 循环

这个例子演示了一个简单的 while 循环,从 1 计数到 5。

basic_while.php
<?php

declare(strict_types=1);

$count = 1;

while ($count <= 5) {
    echo "Count: $count\n";
    $count++;
}

代码将 $count 初始化为 1。循环在计数为 5 或更少时运行。每次迭代都会打印当前的计数并将其递增。当计数达到 6 时,循环结束。这显示了基本的 while 循环结构。

带中断的无限循环

此示例显示了一个带有条件中断的有意无限循环。

infinite_break.php
<?php

declare(strict_types=1);

$value = 0;

while (true) {
    echo "Processing...\n";
    $value += 10;
    
    if ($value >= 50) {
        break;
    }
}

循环条件始终为真,从而创建一个无限循环。在内部,我们每次迭代将 $value 增加 10。当 value 达到 50 时,break 语句退出循环。这种模式对于轮询很有用。

逐行读取文件

此示例演示了使用 while 逐行读取文件。

file_read.php
<?php

declare(strict_types=1);

$file = fopen("data.txt", "r");

while ($line = fgets($file)) {
    echo "Line: $line";
}

fclose($file);

代码打开一个文件用于读取。只要 fgets 返回一行,while 循环就会继续。每次迭代读取并打印一行。当到达 EOF 时,循环停止。在处理完成后,始终关闭文件。

数组处理

此示例演示了如何使用 while 循环处理数组元素。

array_processing.php
<?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 循环。

nested_while.php
<?php

declare(strict_types=1);

$row = 1;
while ($row <= 3) {
    $col = 1;
    while ($col <= 3) {
        echo "($row,$col) ";
        $col++;
    }
    echo "\n";
    $row++;
}

外层循环控制行,内层循环控制列。两个循环都有自己的计数器。内层循环在每次外层循环迭代时完全完成。这会创建一个 3x3 的网格输出。嵌套循环功能强大,但可能很复杂。

数据库记录处理

此示例显示了使用 while 循环处理数据库记录。

database_while.php
<?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。这是数据库操作的常见模式。完成后,始终关闭连接。

带逻辑运算符的条件

此示例演示了带有逻辑运算符的复杂条件。

complex_condition.php
<?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) 组合在一起。如果任一条件失败,循环将退出。这显示了复杂的循环控制逻辑。

最佳实践

来源

PHP while 文档

本教程介绍了 PHP while 循环,并提供了实际示例,展示了基本用法、文件处理、数据库操作和复杂条件。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 PHP 教程