PHP 实现 3:4 交替行列网格输出的完整教程

1次阅读

PHP 实现 3:4 交替行列网格输出的完整教程

本文详解如何使用 phpwhile 循环(或 for 循环)配合取模运算,精准控制每行输出 3 个或 4 个数字,实现「1–3→换行,4–7→换行,8–10→换行,11–14→换行」的 3:4 交替网格布局。

要实现目标输出:

1 2 3 4 5 6 7  8 9 10  11 12 13 14

关键在于识别行边界规律

  • 第1行:1–3 → 共3个数(起始位置:1)
  • 第2行:4–7 → 共4个数(起始位置:4)
  • 第3行:8–10 → 共3个数(起始位置:8)
  • 第4行:11–14 → 共4个数(起始位置:11)

可见,行长度按 3, 4, 3, 4… 交替,总项数为 14。因此,可将循环索引 $i 映射到“逻辑行号”或直接判断其在周期中的位置。

✅ 推荐方案:用取模 7 判断换行点(简洁高效)

观察每行末尾数字:3、7、10、14 —— 它们对 7 取模的结果分别是:

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

  • 3 % 7 = 3
  • 7 % 7 = 0
  • 10 % 7 = 3
  • 14 % 7 = 0

即:每当 $i % 7 == 0 或 $i % 7 == 3 时,应换行。这恰好对应每 7 个数构成一个「3+4」小周期,且第3位和第7位是行尾。

✅ 正确代码(使用 for 循环,更安全易读):

php for ($i = 1; $i <= 14; $i++) {     echo $i;     if (in_array($i % 7, [0, 3])) {         echo '
'; } else { echo ' '; } } ?>

? 输出效果完全匹配需求:1 2 34 5 6 78 9 1011 12 13 14

⚠️ 原代码问题分析

你原始 while 循环存在两个严重错误:

  1. 赋值误写为条件判断
    while($i=1 ✅ 应改为 while($i

  2. 逻辑未体现行列结构
    if($i

? 若坚持用 while 循环(教学兼容版)

';     } else {         echo ' ';     }     $i++; } ?>

? 注意事项与扩展建议

  • 起始/结束灵活调整? 若需支持任意范围(如 1–N),可封装为函数,并预计算每行长度序列(如 array_merge(…array_fill(0, ceil(N/2), [3,4]))),但对小规模场景,取模法仍最轻量。
  • html 空格安全? 生产环境建议用 + css display: inline-block 或
    + flex 布局替代空格+
    ,避免空白符渲染异常。

  • 避免混淆 == 与 =:PHP 中 = 是赋值,== 或 === 才是相等比较——这是初学者高频陷阱。
  • 掌握取模运算识别周期性边界,是 PHP 动态布局(如商品网格、日历、响应式列表)的核心技巧之一。从 3:4 到 2:3:2 或自定义模式,只需调整模数与余数集合即可复用该思想。

text=ZqhQzanResources