最近的项目中,对于for 行X列的循环输出,有些忘记了,写了下demo熟悉下。

<?php
echo “=== PHP for循环嵌套演示 ===\n\n”;
// 1. 基本的二维数组遍历
echo “1. 二维数组遍历:\n”;
$matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
];
var_dump($matrix);
echo “矩阵内容:\n”;
for ($i = 0; $i < count($matrix); $i++) {  //行3
    for ($j = 0; $j < count($matrix[$i]); $j++) { //列4
        echo sprintf(“%3d “, $matrix[$i][$j]);
    }
    echo “\n”;
}
echo “\n”;
//=========================================
// 2. 乘法表
echo “2. 九九乘法表:\n”;
for ($i = 1; $i <= 9; $i++) {  //行9
    for ($j = 1; $j <= $i; $j++) {  //列9
        echo “$j × $i = ” . ($i * $j) . “\t”;
    }
    echo “\n”;
}
echo “\n”;
//=========================================
// 3. 图案打印 – 星号三角形
echo “3. 星号三角形图案:\n”;
$rows = 5;
for ($i = 1; $i <= $rows; $i++) {
    // 打印空格
    for ($j = 1; $j <= $rows – $i; $j++) {
        echo ” “;
    }
    // 打印星号
    for ($k = 1; $k <= (2 * $i – 1); $k++) {
        echo “*”;
    }
    echo “\n”;
}
echo “\n”;
//=========================================
// 4. 数字金字塔
echo “4. 数字金字塔:\n”;
for ($i = 1; $i <= 5; $i++) {
    // 打印前导空格
    for ($j = 1; $j <= 5 – $i; $j++) {
        echo ” “;
    }
    // 打印递增数字
    for ($k = 1; $k <= $i; $k++) {
        echo $k;
    }
    // 打印递减数字
    for ($l = $i – 1; $l >= 1; $l–) {
        echo $l;
    }
    echo “\n”;
}
echo “\n”;
//=========================================
// 5. 矩阵操作 – 矩阵转置
echo “5. 矩阵转置:\n”;
$originalMatrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];
echo “原始矩阵:\n”;
for ($i = 0; $i < count($originalMatrix); $i++) {
    for ($j = 0; $j < count($originalMatrix[$i]); $j++) {
        echo sprintf(“%3d “, $originalMatrix[$i][$j]);
    }
    echo “\n”;
}
echo “转置矩阵:\n”;
for ($i = 0; $i < count($originalMatrix[0]); $i++) { // 列数
    for ($j = 0; $j < count($originalMatrix); $j++) { // 行数
        echo sprintf(“%3d “, $originalMatrix[$j][$i]);
    }
    echo “\n”;
}
echo “\n”;
//=========================================
// 6. 三维数组处理
echo “6. 三维数组处理:\n”;
$cube = [];
for ($i = 0; $i < 3; $i++) {
    for ($j = 0; $j < 3; $j++) {
        for ($k = 0; $k < 3; $k++) {
            $cube[$i][$j][$k] = $i * 100 + $j * 10 + $k;
        }
    }
}
echo “三维数组内容:\n”;
for ($i = 0; $i < 3; $i++) {
    echo “层 $i:\n”;
    for ($j = 0; $j < 3; $j++) {
        echo ”  行 $j: “;
        for ($k = 0; $k < 3; $k++) {
            echo sprintf(“%3d “, $cube[$i][$j][$k]);
        }
        echo “\n”;
    }
    echo “\n”;
}
//=========================================
// 7. 矩阵相乘
echo “7. 矩阵相乘演示:\n”;
$matrixA = [
    [1, 2, 3],
    [4, 5, 6]
];
$matrixB = [
    [7, 8],
    [9, 10],
    [11, 12]
];
echo “矩阵A (2×3):\n”;
for ($i = 0; $i < count($matrixA); $i++) {
    for ($j = 0; $j < count($matrixA[$i]); $j++) {
        echo sprintf(“%3d “, $matrixA[$i][$j]);
    }
    echo “\n”;
}
echo “矩阵B (3×2):\n”;
for ($i = 0; $i < count($matrixB); $i++) {
    for ($j = 0; $j < count($matrixB[$i]); $j++) {
        echo sprintf(“%3d “, $matrixB[$i][$j]);
    }
    echo “\n”;
}
// 矩阵相乘结果 (2×2)
$result = [];
for ($i = 0; $i < count($matrixA); $i++) {
    for ($j = 0; $j < count($matrixB[0]); $j++) {
        $result[$i][$j] = 0;
        for ($k = 0; $k < count($matrixB); $k++) {
            $result[$i][$j] += $matrixA[$i][$k] * $matrixB[$k][$j];
        }
    }
}
echo “矩阵A × 矩阵B 结果 (2×2):\n”;
for ($i = 0; $i < count($result); $i++) {
    for ($j = 0; $j < count($result[$i]); $j++) {
        echo sprintf(“%4d “, $result[$i][$j]);
    }
    echo “\n”;
}
echo “\n”;
//=========================================
// 8. 性能对比:不同循环结构
echo “8. 循环性能对比演示:\n”;
// 测试数据
$size = 100;
$testMatrix = [];
// 初始化测试矩阵
for ($i = 0; $i < $size; $i++) {
    for ($j = 0; $j < $size; $j++) {
        $testMatrix[$i][$j] = $i * $size + $j;
    }
}
// 测试for循环性能
$start = microtime(true);
$sum = 0;
for ($i = 0; $i < $size; $i++) {
    for ($j = 0; $j < $size; $j++) {
        $sum += $testMatrix[$i][$j];
    }
}
$end = microtime(true);
echo “For循环计算矩阵元素和: $sum\n”;
echo “耗时: ” . (($end – $start) * 1000) . ” 毫秒\n\n”;
//=========================================
// 9. 复杂数学计算 – 生成帕斯卡三角形
echo “9. 帕斯卡三角形 (杨辉三角):\n”;
$n = 8;
$pascal = [];
// 生成帕斯卡三角形
for ($i = 0; $i < $n; $i++) {
    for ($j = 0; $j <= $i; $j++) {
        if ($j == 0 || $j == $i) {
            $pascal[$i][$j] = 1;
        } else {
            $pascal[$i][$j] = $pascal[$i-1][$j-1] + $pascal[$i-1][$j];
        }
    }
}
// 打印帕斯卡三角形
for ($i = 0; $i < $n; $i++) {
    // 打印前导空格
    for ($k = 0; $k < $n – $i – 1; $k++) {
        echo ”  “;
    }
    // 打印数字
    for ($j = 0; $j <= $i; $j++) {
        echo sprintf(“%4d”, $pascal[$i][$j]);
    }
    echo “\n”;
}
echo “\n”;
//=========================================
// 10. 实际应用:图的邻接矩阵初始化(与您之前的代码相关)
echo “10. 图的邻接矩阵初始化:\n”;
$vertices = 5;
$adjMatrix = [];
// 使用嵌套for循环初始化邻接矩阵
for ($i = 0; $i < $vertices; $i++) {
    for ($j = 0; $j < $vertices; $j++) {
        $adjMatrix[$i][$j] = 0; // 初始化为0,表示无连接
    }
}
echo “初始化的 {$vertices}×{$vertices} 邻接矩阵:\n”;
for ($i = 0; $i < $vertices; $i++) {
    for ($j = 0; $j < $vertices; $j++) {
        echo sprintf(“%2d “, $adjMatrix[$i][$j]);
    }
    echo “\n”;
}
// 添加一些边
$edges = [[0,1], [1,2], [2,3], [3,4], [0,4]];
for ($i = 0; $i < count($edges); $i++) {
    $from = $edges[$i][0];
    $to = $edges[$i][1];
    $adjMatrix[$from][$to] = 1;
    $adjMatrix[$to][$from] = 1; // 无向图
}
echo “\n添加边后的邻接矩阵:\n”;
for ($i = 0; $i < $vertices; $i++) {
    for ($j = 0; $j < $vertices; $j++) {
        echo sprintf(“%2d “, $adjMatrix[$i][$j]);
    }
    echo “\n”;
}
?>
分类:

发表评论

邮箱地址不会被公开。