循环语句 #

一、while 循环 #

1.1 基本语法 #

php
<?php
$i = 1;

while ($i <= 5) {
    echo $i . "\n";
    $i++;
}

1.2 执行流程 #

  1. 检查条件
  2. 条件为真执行循环体
  3. 重复步骤1-2

1.3 无限循环 #

php
<?php
while (true) {
    $input = readline("输入 'quit' 退出: ");
    if ($input === 'quit') {
        break;
    }
    echo "你输入了: $input\n";
}

1.4 读取数据 #

php
<?php
$fp = fopen('data.txt', 'r');

while (($line = fgets($fp)) !== false) {
    echo $line;
}

fclose($fp);

二、do-while 循环 #

2.1 基本语法 #

php
<?php
$i = 1;

do {
    echo $i . "\n";
    $i++;
} while ($i <= 5);

2.2 至少执行一次 #

php
<?php
$i = 10;

do {
    echo $i . "\n";
    $i++;
} while ($i <= 5);

2.3 与while的区别 #

php
<?php
$i = 10;

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

do {
    echo "do-while: $i\n";
    $i++;
} while ($i <= 5);

2.4 菜单选择 #

php
<?php
do {
    echo "1. 选项一\n";
    echo "2. 选项二\n";
    echo "3. 退出\n";
    
    $choice = (int) readline("请选择: ");
    
    switch ($choice) {
        case 1:
            echo "你选择了选项一\n";
            break;
        case 2:
            echo "你选择了选项二\n";
            break;
        case 3:
            echo "再见!\n";
            break;
        default:
            echo "无效选择\n";
    }
} while ($choice !== 3);

三、for 循环 #

3.1 基本语法 #

php
<?php
for ($i = 1; $i <= 5; $i++) {
    echo $i . "\n";
}

3.2 执行流程 #

  1. 执行初始化表达式
  2. 检查条件
  3. 条件为真执行循环体
  4. 执行迭代表达式
  5. 重复步骤2-4

3.3 多个表达式 #

php
<?php
for ($i = 0, $j = 10; $i < $j; $i++, $j--) {
    echo "i = $i, j = $j\n";
}

3.4 省略表达式 #

php
<?php
$i = 1;
for (; $i <= 5;) {
    echo $i . "\n";
    $i++;
}

for (;;) {
    echo "无限循环\n";
    break;
}

3.5 遍历数组 #

php
<?php
$fruits = ['apple', 'banana', 'cherry'];

for ($i = 0; $i < count($fruits); $i++) {
    echo $fruits[$i] . "\n";
}

3.6 九九乘法表 #

php
<?php
for ($i = 1; $i <= 9; $i++) {
    for ($j = 1; $j <= $i; $j++) {
        printf("%d×%d=%-4d", $j, $i, $i * $j);
    }
    echo "\n";
}

四、foreach 循环 #

4.1 遍历数组 #

php
<?php
$fruits = ['apple', 'banana', 'cherry'];

foreach ($fruits as $fruit) {
    echo $fruit . "\n";
}

4.2 键值对遍历 #

php
<?php
$user = [
    'name' => 'John',
    'age' => 25,
    'city' => 'Beijing'
];

foreach ($user as $key => $value) {
    echo "$key: $value\n";
}

4.3 修改数组元素 #

php
<?php
$numbers = [1, 2, 3, 4, 5];

foreach ($numbers as &$number) {
    $number *= 2;
}
unset($number);

print_r($numbers);

4.4 遍历多维数组 #

php
<?php
$users = [
    ['name' => 'John', 'age' => 25],
    ['name' => 'Jane', 'age' => 30],
    ['name' => 'Bob', 'age' => 35]
];

foreach ($users as $user) {
    echo $user['name'] . ': ' . $user['age'] . "\n";
}

4.5 遍历对象 #

php
<?php
class User
{
    public string $name = 'John';
    public int $age = 25;
    private string $email = 'john@example.com';
}

$user = new User();

foreach ($user as $key => $value) {
    echo "$key: $value\n";
}

五、替代语法 #

5.1 while 替代语法 #

php
<?php
$i = 1;

while ($i <= 5):
    echo $i . "\n";
    $i++;
endwhile;

5.2 for 替代语法 #

php
<?php
for ($i = 1; $i <= 5; $i++):
    echo $i . "\n";
endfor;

5.3 foreach 替代语法 #

php
<?php
$items = ['a', 'b', 'c'];

foreach ($items as $item):
    echo $item . "\n";
endforeach;

5.4 在HTML中使用 #

php
<?php $items = ['Apple', 'Banana', 'Cherry']; ?>

<ul>
<?php foreach ($items as $item): ?>
    <li><?= htmlspecialchars($item) ?></li>
<?php endforeach; ?>
</ul>

六、嵌套循环 #

6.1 二维数组遍历 #

php
<?php
$matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

foreach ($matrix as $row) {
    foreach ($row as $value) {
        echo $value . " ";
    }
    echo "\n";
}

6.2 打印图案 #

php
<?php
for ($i = 1; $i <= 5; $i++) {
    for ($j = 1; $j <= $i; $j++) {
        echo "*";
    }
    echo "\n";
}

七、循环优化 #

7.1 避免重复计算 #

php
<?php
$arr = range(1, 1000);

for ($i = 0, $count = count($arr); $i < $count; $i++) {
    echo $arr[$i];
}

for ($i = 0; $i < count($arr); $i++) {
    echo $arr[$i];
}

7.2 使用foreach代替for #

php
<?php
$arr = ['a', 'b', 'c'];

foreach ($arr as $value) {
    echo $value;
}

for ($i = 0; $i < count($arr); $i++) {
    echo $arr[$i];
}

7.3 提前终止 #

php
<?php
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$found = false;

foreach ($numbers as $number) {
    if ($number === 5) {
        $found = true;
        break;
    }
}

八、实际应用 #

8.1 分页显示 #

php
<?php
$items = range(1, 100);
$page = $_GET['page'] ?? 1;
$perPage = 10;
$total = count($items);
$totalPages = ceil($total / $perPage);
$offset = ($page - 1) * $perPage;

for ($i = $offset; $i < min($offset + $perPage, $total); $i++) {
    echo "Item: " . $items[$i] . "\n";
}

8.2 数据处理 #

php
<?php
$users = [
    ['name' => 'John', 'scores' => [80, 85, 90]],
    ['name' => 'Jane', 'scores' => [75, 80, 85]],
    ['name' => 'Bob', 'scores' => [90, 95, 100]]
];

foreach ($users as &$user) {
    $total = 0;
    foreach ($user['scores'] as $score) {
        $total += $score;
    }
    $user['average'] = $total / count($user['scores']);
}

print_r($users);

8.3 生成HTML表格 #

php
<?php
$data = [
    ['Name', 'Age', 'City'],
    ['John', 25, 'Beijing'],
    ['Jane', 30, 'Shanghai'],
    ['Bob', 35, 'Guangzhou']
];

echo "<table border='1'>\n";
foreach ($data as $row) {
    echo "  <tr>\n";
    foreach ($row as $cell) {
        echo "    <td>$cell</td>\n";
    }
    echo "  </tr>\n";
}
echo "</table>\n";

九、总结 #

本章学习了:

  • while循环
  • do-while循环
  • for循环
  • foreach循环
  • 替代语法
  • 嵌套循环
  • 循环优化

下一章将学习循环控制语句。

最后更新:2026-03-26