循环语句 #
一、while 循环 #
1.1 基本语法 #
php
<?php
$i = 1;
while ($i <= 5) {
echo $i . "\n";
$i++;
}
1.2 执行流程 #
- 检查条件
- 条件为真执行循环体
- 重复步骤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 执行流程 #
- 执行初始化表达式
- 检查条件
- 条件为真执行循环体
- 执行迭代表达式
- 重复步骤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