← PHP中数字三角形的八种常见图案(for循环与嵌套) 没有下一篇了 →

PHP中星号三角形的六种常见图案(for循环嵌套)

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

星号三角形概述

星号三角形(Star )是PHP循环练习中的经典题型,使用*符号通过嵌套循环打印出各种几何形状。与数字三角形相比,星号三角形的逻辑更集中在控制输出数量和位置,不涉及数字本身的变化。掌握这些图案,对理解二维空间输出、循环边界控制很有帮助。

个人经验:星号图案练习的价值不在于图案本身,而在于训练“把空间想象转化为循环条件”的能力。项目开发中很少需要打印星号,但同样的逻辑在处理表格布局、网格数据时经常用到。

Pattern 1:倒三角形(星号数量递减)

每行星号数量从上到下递减,第1行最多,之后一行最少。

<?php  
for ($row = 0; $row <= 5; $row++) {  
    // 每行星号数量 = 5 - 当前行号
    for ($star = 5 - $row; $star >= 1; $star--) {  
        echo "* ";  
    }  
    echo "<br>";  
}  
?>

输出

* * * * * * 
* * * * * 
* * * * 
* * * 
* * 
* 

规律:外层$row=0时,内层$star从5到1,输出6个星号(注意<=5共6行)。内层循环的初始值5-$row决定了每行的星号数量。

Pattern 2:正三角形(星号数量递增)

每行星号数量从上到下递增,第1行最少,之后一行最多。

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

输出

* 
* * 
* * * 
* * * * 
* * * * * 

注意第1行($row=0)时内层条件$star<=0不成立,输出空行。如果想从1个星号开始,可以把外层循环改为$row=1开始。

Pattern 3:菱形(正三角形+倒三角形,带空格)

这是Pattern 2和Pattern 1的组合,中间加上前置空格实现居中对齐。

<?php  
// 上半部分:正三角形
for ($row = 1; $row <= 5; $row++) {  
    // 输出前置空格(逐行减少)
    for ($space = 5; $space >= $row; $space--) {  
        echo "  ";   // 两个空格
    }  
    // 输出星号(逐行增加)
    for ($star = 1; $star <= $row; $star++) {  
        echo "*  ";   // 星号加两个空格
    }  
    echo "<br>";  
}  

// 下半部分:倒三角形(去掉中间行避免重复)
for ($row = 4; $row >= 1; $row--) {  
    // 输出前置空格(逐行增加)
    for ($space = 5; $space >= $row; $space--) {  
        echo "  ";  
    }  
    // 输出星号(逐行减少)
    for ($star = 1; $star <= $row; $star++) {  
        echo "*  ";  
    }  
    echo "<br>";  
}  
?>

输出

          *  
        *  *  
      *  *  *  
    *  *  *  *  
  *  *  *  *  *  
    *  *  *  *  
      *  *  *  
        *  *  
          *  

规律:上半部分行号1-5,前置空格逐渐减少,星号逐渐增加;下半部分行号4-1,前置空格逐渐增加,星号逐渐减少。

个人经验:Pattern 3的代码中用了一些空格来调整对齐。实际练习时可以先把空格去掉,输出一个不带居中的V形,然后再逐步添加空格调整位置。分步调试更容易找到问题。

Pattern 4:正三角形+倒三角形(上下拼接,无空格)

两个三角形直接拼接,形成一个菱形的一半效果(实际是正三角加倒三角)。

<?php  
// 上半部分:正三角形
for ($row = 1; $row <= 5; $row++) {   
    for ($star = 1; $star <= $row; $star++) {   
        echo ' * ';   
    }  
    echo '<br>';   
}  

// 下半部分:倒三角形
for ($row = 5; $row >= 1; $row--) {   
    for ($star = 1; $star <= $row; $star++) {  
        echo ' * ';   
    }   
    echo '<br>';   
}   
?>

输出

 * 
 *  * 
 *  *  * 
 *  *  *  * 
 *  *  *  *  * 
 *  *  *  *  * 
 *  *  *  * 
 *  *  * 
 *  * 
 * 

注意中间行(5个星号)出现了两次。

Pattern 5:实心矩形(5x5网格)

一个5行5列的星号矩形,是最基本的二维网格输出。

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

输出

* * * * * 
* * * * * 
* * * * * 
* * * * * 
* * * * * 

Pattern 6:隔行输出的倒三角形(只显示奇数行)

这个图案只输出奇数行的倒三角形部分,形成一个间断的图案。

<?php  
// 上半部分:从第5行向下到第1行,只取奇数行
for ($row = 5; $row >= 1; $row--) {  
    if ($row % 2 != 0) {   // 行号为奇数才输出
        for ($star = 5; $star >= $row; $star--) {  
            echo "* ";  
        }  
        echo "<br>";  
    }  
}  

// 下半部分:从第2行向上到第5行,只取奇数行
for ($row = 2; $row <= 5; $row++) {  
    if ($row % 2 != 0) {  
        for ($star = 5; $star >= $row; $star--) {  
            echo "* ";  
        }  
        echo "<br>";  
    }  
}  
?>

输出

* 
* * * 
* * * * * 
* * * 
* 

规律:只输出行号为奇数的倒三角形。第5行输出5个星号,第3行输出3个星号,第1行输出1个星号;然后第3行再输出3个星号,第1行输出1个星号。

个人经验:Pattern 6的逻辑稍绕,核心是通过$row % 2 != 0筛选行号。这种“条件输出”的思路在处理需要过滤某些行的场景时很有用。

本节课程知识要点

知识点 说明
正三角形 内层循环条件$star <= $row,星号数量随行号递增
倒三角形 内层循环条件$star >= 1配合递减初始值,星号数量递减
前置空格 通过额外的内层循环输出空格,实现居中对齐
菱形拼接 正三角形+倒三角形组合,注意中间行不要重复
矩形网格 双层循环都使用固定边界,形成方阵
条件输出 if($row%2!=0)筛选特定行号

六种图案的对比

图案 形状 特殊处理 适用练习点
Pattern 1 倒三角形 递减循环
Pattern 2 正三角形 递增循环
Pattern 3 菱形(带空格) 前置空格 空格控制+上下拼接
Pattern 4 上下拼接 中间行重复 连续两个循环
Pattern 5 实心矩形 固定边界 二维网格
Pattern 6 隔行倒三角 奇偶筛选 条件输出

常见错误与排查

错误1:正三角形第一行为空

  • 原因:外层循环从0开始,内层$star<=0不成立

  • 解决:从1开始循环,如for($row=1;$row<=5;$row++)

错误2:菱形图案的上下两部分不对称

  • 原因:上下部分的行号范围或空格数量计算不一致

  • 解决:先画对称的正三角形和倒三角形,再分别调整空格

错误3:矩形图案中每行星号数量不一致

  • 原因:内层循环的边界写成了$col<=$row

  • 解决:矩形应该用固定边界,如$col<=5

个人经验与建议

第一,按难度顺序练习。建议顺序:Pattern 5(矩形)→ Pattern 2(正三角)→ Pattern 1(倒三角)→ Pattern 4(上下拼接)→ Pattern 3(菱形)→ Pattern 6(条件输出)。矩形最简单,菱形相对复杂。

第二,注意空格和星号的比例。Pattern 3用了两个空格和一个星号加两个空格的组合。实际练习时可以先用单个空格调试,对齐后再调整间距。浏览器中空格会合并显示,建议用&nbsp;或在<pre>标签中预览。

第三,学会拆分复杂图案。Pattern 3的菱形可以看作“上半部分”和“下半部分”两个独立图案的拼接。先分别写出正三角形和倒三角形,再加前置空格,之后拼起来调试。

第四,理解内层循环的边界计算。Pattern 1中5-$row是星号数量,Pattern 3中5>=$i是空格数量。这些计算本质上是在“行号”和“输出数量”之间建立映射关系。把映射公式写出来,代码自然就有了。

第五,关于Pattern 6。这个图案的实际应用价值不大,主要是训练条件判断和循环的结合。如果觉得理解困难,可以先跳过,把前面的基础图案练熟。

← PHP中数字三角形的八种常见图案(for循环与嵌套) 没有下一篇了 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号