← PHP中五种字母三角形图案的详细拆解(使用range()函数) PHP中星号三角形的六种常见图案(for循环嵌套) →

PHP中数字三角形的八种常见图案(for循环与嵌套)

原创 2026-05-21 PHP 已有人查阅

数字三角形概述

数字三角形(Number )是PHP循环练习中的常见题型,通过嵌套循环控制输出数字的排列方式。这些图案的核心区别在于:外层循环控制行数,内层循环控制每行输出的数字内容和数量。掌握这些模式,对理解二维数据输出、矩阵打印等场景很有帮助。

个人经验:初学嵌套循环时,建议先明确想要的效果(比如第一行几个数、第二行几个数),然后反推循环边界条件。从具体输出反推循环逻辑,比凭空写循环容易得多。

Pattern 1:连续递增数列(顺序填充)

这个图案的特点是数字按顺序连续填充到三角形中,跨行不断开。

<?php  
$counter = 1;  
for ($row = 0; $row < 4; $row++) {  
    for ($col = 0; $col <= $row; $col++) {  
        echo $counter . " ";  
        $counter++;   // 每次输出后自增,保证数字连续
    }  
    echo "<br>";  
}  
?>

输出

1 
2 3 
4 5 6 
7 8 9 10 

规律:第1行1个数,第2行2个数,第3行3个数,第4行4个数。$counter从1开始,每输出一个数字就加1,整体形成连续数列。

Pattern 2:01交替三角形(奇偶行不同)

这个图案中,每行内数字在0和1之间交替出现。

<?php  
for ($row = 0; $row < 5; $row++) {  
    for ($col = 0; $col <= $row; $col++) {  
        if ($col % 2 == 0) {  
            echo "0 ";   // 偶数列(第0、2、4…列)输出0
        } else {  
            echo "1 ";   // 奇数列(第1、3、5…列)输出1
        }  
    }  
    echo "<br>";  
}  
?>

输出

0 
0 1 
0 1 0 
0 1 0 1 
0 1 0 1 0 

规律:每行都是从0开始,然后在0和1之间切换。注意这里用的是$col % 2判断,跟行号$row无关。所以每行的模式都是0、1、0、1……

个人经验:Pattern 2里的$k变量其实是多余的。原示例中先定义$k=1然后在循环内根据条件改成0或1,不如直接在if/else里输出具体的0和1更直观。简化后的代码更容易理解。

Pattern 3:逐行递增数字(每行从1开始)

每行输出的数字从1开始递增到当前行号。

<?php  
for ($row = 1; $row <= 5; $row++) {  
    for ($col = 1; $col <= $row; $col++) {  
        echo $col;   // 输出列号,不是行号
    }  
    echo "<br>";  
}  
?>

输出

1
12
123
1234
12345

规律:第1行输出1,第2行输出1、2,第3行输出1、2、3……内层循环输出的是$col的值(从1递增),而不是固定的数字。

Pattern 5:全1三角形(正三角形)

每行输出相同数字1,行数决定每行1的个数。

<?php  
for ($row = 1; $row <= 5; $row++) {  
    for ($col = 1; $col <= $row; $col++) {  
        echo "1";  
    }  
    echo "<br>";  
}  
?>

输出

1
11
111
1111
11111

规律:最简单的正三角形图案,内层循环只负责控制输出次数,不涉及数字变化。

Pattern 6:全1倒三角形(正三角形反转)

每行输出1,但数量从上到下递减。

<?php  
for ($row = 0; $row <= 5; $row++) {  
    for ($col = 5 - $row; $col >= 1; $col--) {  
        echo "1";  
    }  
    echo "<br>";  
}  
?>

输出

11111
1111
111
11
1

规律:内层循环的初始值是5-$row,第1行5-0=5次,第2行5-1=4次……第5行5-4=1次。

Pattern 7:倒三角形递减数字(每行从大数开始递减)

每行从某个数字开始向下递减,行号决定起始数字。

<?php  
for ($row = 0; $row <= 5; $row++) {  
    for ($col = 5 - $row; $col >= 1; $col--) {  
        echo $col;   // 输出列号(递减的)
    }  
    echo "<br>";  
}  
?>

输出

54321
4321
321
21
1

规律:第1行$col从5递减到1,输出54321;第2行从4递减到1,输出4321;以此类推。

Pattern 8:行号重复三角形(每行输出相同的行号)

每行输出同一个数字(即当前行号),重复次数等于行号。

<?php  
for ($row = 5; $row >= 1; $row--) {  
    for ($col = $row; $col >= 1; $col--) {  
        echo $row . " ";   // 输出行号,不是列号
    }  
    echo "<br>";  
}  
?>

输出

5 5 5 5 5 
4 4 4 4 
3 3 3 
2 2 
1 

规律:外层循环从5递减到1,内层循环次数等于当前行号。每行输出相同的行号数字。

本节课程知识要点

知识点 说明
外层循环(行控制) 控制总行数,$row变量代表当前行号
内层循环(列控制) 控制每行的输出次数,次数与行号相关
连续计数器 跨行保持一个累加变量(如Pattern 1的$counter
奇偶交替模式 利用%取模判断索引的奇偶性
递减循环 for($i=5;$i>=1;$i--)实现倒序
行号与列号区分 echo $row输出行号,echo $col输出列号

Pattern 4 的说明

原示例中的Pattern 4代码有误:

for($i=0;$i>=5;$i++){   // 条件 $i>=5 不成立,循环不会执行

这个循环不会进入,因为初始$i=0,条件$i>=5为false。正确的Pattern 4通常是一个倒三角形,但原文没有提供正确版本,这里不展开。

八种图案的对比

图案 形状 数字内容 变化规律
Pattern 1 正三角 连续递增 1,2,3,4…跨行连续
Pattern 2 正三角 0和1交替 按列奇偶交替
Pattern 3 正三角 1到行号 每行从1递增
Pattern 5 正三角 全是1 固定数字
Pattern 6 倒三角 全是1 固定数字
Pattern 7 倒三角 递减数字 每行从大数递减到1
Pattern 8 倒三角 重复行号 每行输出当前行号

常见错误与排查

错误1:循环边界差1(多一行或少一行)

  • 例如:$row<5$row<=5的区别

  • 解决:先用小数字(比如3行)测试,确认边界值

错误2:内层循环的初始值或条件写反

  • 例如:正三角写成$col <= $row,倒三角写成$col >= 1

  • 解决:用具体数值代入验证

错误3:输出时忘记换行

  • 后果:所有数字挤在一行

  • 解决:内层循环结束后加echo "<br>"echo "\n"

个人经验与建议

第一,从最简单的图案开始。建议按顺序练习:Pattern 5(全1正三角)→ Pattern 6(全1倒三角)→ Pattern 3(123递增)→ Pattern 7(54321递减)→ Pattern 1(连续数)。Pattern 8和Pattern 2稍复杂,可以放在后面。

第二,理解行号和列号的角色。在$row$col的双重循环中,$row决定“第几行”,$col决定“第几个”。输出$row还是输出$col,结果不同。这是区分不同图案的关键。

第三,自己动手修改参数。尝试把Pattern 3中的echo $col改成echo $row,看看输出变成什么样子。这种“微调后观察变化”的做法,对理解循环逻辑很有帮助。

第四,注意Pattern 1中的$counter位置。它在内层循环中累加,但定义在外层循环之前。如果把$counter=1放在外层循环内部,每行都会重置,结果就不一样了。这是一个容易忽略的细节。

← PHP中五种字母三角形图案的详细拆解(使用range()函数) PHP中星号三角形的六种常见图案(for循环嵌套) →
分享笔记 (共有 篇笔记)
验证码:
微信公众号