PHP 嵌套循环的深入使用

嵌套循环是指在一个循环内部包含另一个循环的结构。PHP 中嵌套循环可以处理多维数据、复杂模式生成等任务。以下是嵌套循环的各种使用场景和示例:

1. 基本二维数组遍历

php

$matrix = [

[1, 2, 3],

[4, 5, 6],

[7, 8, 9]

// 外层循环控制行,内层循环控制列

for ($i = 0; $i < count($matrix); $i++) {

for ($j = 0; $j < count($matrix[$i]); $j++) {

echo $matrix[$i][$j] . " ";

echo "\n"; // 换行

2. 打印乘法表

php

for ($i = 1; $i <= 9; $i++) {

for ($j = 1; $j <= $i; $j++) {

echo "$j × $i = " . ($i * $j) . "\t";

echo "\n";

3. 多维关联数组处理

php

$students = [

"class1" => ["Alice" => 85, "Bob" => 76],

"class2" => ["Charlie" => 92, "David" => 88],

"class3" => ["Eve" => 95, "Frank" => 79]

foreach ($students as $class => $scores) {

echo "班级: $class\n";

for ($i = 0; $i < count($scores); $i++) {

$name = array_keys($scores)[$i];

$score = array_values($scores)[$i];

echo " $name: $score\n";

4. 生成复杂图案

php

// 金字塔图案

$rows = 5;

for ($i = 1; $i <= $rows; $i++) {

// 打印空格

for ($k = $rows; $k > $i; $k--) {

echo " ";

// 打印星号

for ($j = 1; $j <= (2 * $i - 1); $j++) {

echo "*";

echo "\n";

5. 矩阵运算

php

$a = [[1, 2], [3, 4]];

$b = [[5, 6], [7, 8]];

$result = [[0, 0], [0, 0]];

// 矩阵相乘

for ($i = 0; $i < 2; $i++) {

for ($j = 0; $j < 2; $j++) {

for ($k = 0; $k < 2; $k++) {

$result[$i][$j] += $a[$i][$k] * $b[$k][$j];

print_r($result);

6. 三重嵌套循环处理三维数据

php

// 三维数组遍历

$cube = [

[1, 2],

[3, 4]

],

[5, 6],

[7, 8]

for ($i = 0; $i < count($cube); $i++) {

for ($j = 0; $j < count($cube[$i]); $j++) {

for ($k = 0; $k < count($cube[$i][$j]); $k++) {

echo "cube[$i][$j][$k] = " . $cube[$i][$j][$k] . "\n";

7. 组合生成

php

// 生成所有可能的两位数组合

for ($i = 1; $i <= 3; $i++) {

for ($j = 1; $j <= 3; $j++) {

echo "$i$j ";

// 输出: 11 12 13 21 22 23 31 32 33

8. 嵌套循环中的控制结构

php

// 查找素数

for ($n = 2; $n <= 50; $n++) {

$isPrime = true;

for ($i = 2; $i * $i <= $n; $i++) {

if ($n % $i == 0) {

$isPrime = false;

break;

if ($isPrime) {

echo "$n 是素数\n";

9. 嵌套循环与条件判断结合

php

// 找出100-999之间的水仙花数

for ($i = 1; $i <= 9; $i++) {

for ($j = 0; $j <= 9; $j++) {

for ($k = 0; $k <= 9; $k++) {

$num = $i * 100 + $j * 10 + $k;

$sum = $i**3 + $j**3 + $k**3;

if ($num == $sum) {

echo "$num 是水仙花数\n";

10. 性能考虑与优化

php

// 不优化的嵌套循环

$start = microtime(true);

for ($i = 0; $i < 1000; $i++) {

for ($j = 0; $j < 1000; $j++) {

// 一些操作

echo "执行时间: " . (microtime(true) - $start) . " 秒\n";

// 优化的嵌套循环(减少内部循环的计算)

$start = microtime(true);

$limit = 1000;

for ($i = 0; $i < $limit; $i++) {

for ($j = 0; $j < $limit; $j++) {

// 一些操作

echo "优化后执行时间: " . (microtime(true) - $start) . " 秒\n";

嵌套循环的最佳实践

  1. 避免过深嵌套:通常超过3层嵌套会使代码难以理解和维护
  2. 合理命名变量:使用有意义的变量名如,而不是,
  3. $row
  4. $col
  5. $i
  6. $j

  1. 考虑性能:内层循环的执行次数是总复杂度的关键
  2. 适时使用 break/continue:可以提前终止或跳过某些迭代
  3. 考虑替代方案:对于某些问题,递归或专用函数可能更合适

嵌套循环是处理多维数据的强大工具,但需要谨慎使用以避免代码复杂度过高和性能问题。