如何在 PHP 中生成按顺序递增的二维数组

本文介绍如何使用嵌套循环在 php 中构建一个按全局顺序连续递增的二维数组,使每一行接续上一行的数值,而非重复填充相同序列。

在 PHP 中创建二维数组时,若希望内层数组的元素按全局连续整数(如 1, 2, 3, …)依次填充(例如第 0 行为 1–10,第 1 行为 11–20,依此类推),关键在于维护一个跨行共享的计数器,并在嵌套循环中逐个赋值,而非复用同一行数组。

你原始代码的问题在于:先构造了 $row = [1,2,...,10],再将其重复 array_push($grid, $row) 四次——这导致所有子数组引用(或复制)了完全相同的值序列。PHP 中数组是值类型(非引用),但逻辑上仍是“静态复制”,无法自动递增。

✅ 正确做法是使用外层循环控制行数、内层循环控制列数,并用一个持续递增的变量 current 记录当前要填入的数字

current = 1; // 全局递增计数器,从 1 开始

for ($i = 0; $i < $rowCount; $i++) {
    $row = [];
    for ($j = 0; $j < $columnCount; $j++) {
        $row[$j] = $current;
        $current++;
    }
    $grid[$i] = $row; // 或用 array_push($grid, $row)
}

print_r($grid);
?>

? 输出效果(与你的目标完全一致):

立即学习“PHP免费学习笔记(深入)”;

Array
(
    [0] => Array ([0]=>1, [1]=>2, ..., [9]=>10)
    [1] => Array ([0]=>11, [1]=>12, ..., [9]=>20)
    [2] => Array ([0]=>21, [1]=>22, ..., [9]=>30)
    [3] => Array ([0]=>31, [1]=>32, ..., [9]=>40)
)

? 进阶建议

  • 可封装为函数提升复用性:
    function createSequential2DArray(int $rows, int $cols, int $start = 1): array {
        $grid = [];
        $current = $start;
        for ($i = 0; $i < $rows; $i++) {
            $row = [];
            for ($j = 0; $j < $cols; $j++) {
                $row[] = $current++;
            }
            $grid[] = $row;
        }
        return $grid;
    }
    $grid = createSequential2DArray(4, 10); // 自动从 1 开始
  • 若需支持 Twig 模板渲染(如你的 view.html),确保传递 $grid 后,在模板中可直接遍历:
    {% for rowIndex, row in grid %}
      
        {% for colIndex, cell in row %}
          {{ cell }}
        {% endfor %}
      
    {% endfor %}

⚠️ 注意事项

  • 避免在循环外预定义 $row 并反复 array_push($grid, $row) —— 这会导致所有行内容相同;
  • 使用 $grid[$i] = $row 或 array_push($grid, $row) 效果等价,但前者更直观体现索引关系;
  • 起始值 1 可灵活调整(如改为 0 或 $start 参数),适应不同业务场景。

通过这种结构清晰的双层循环设计,你不仅能精准生成所需二维网格,也为后续集成前端渲染(如带唯一 ID 的 HTML 表格单元格)打下坚实基础。