PHP打印杨辉三角的核心是用二维数组+嵌套循环实现:每行首尾为1,中间元素等于上一行相邻两数之和;可优化为一维数组滚动更新节省空间,并通过居中对齐美化输出。

用PHP打印杨辉三角,核心在于理解其数学规律:每行首尾为1,中间每个数等于上一行相邻两数之和。实现方式灵活,可选循环、数组存储或递归,但推荐用二维数组+嵌套循环,清晰高效、易调试。
一、杨辉三角的生成逻辑
第n行有n个数(行号从1开始),第1行是[1],第2行是[1,1],第3行是[1,2,1]…… 关键规则:
- 每行第一个和最后一个元素恒为1
- 第i行第j列(i≥3,2≤j≤i−1)的值 = 第(i−1)行第(j−1)列 + 第(i−1)行第j列
- 可借助二维数组 $triangle[i] 存储第i+1行(PHP索引从0开始)
二、基础版:嵌套for循环实现
适合初学者,直观体现逐行构建过程:
示例代码:$n = 6; // 打印前6行
$triangle = [];
<p>for ($i = 0; $i < $n; $i++) {
$triangle[$i] = array_fill(0, $i + 1, 1); // 先全填1
for ($j = 1; $j < $i; $j++) {
$triangle[$i][$j] = $triangle[$i - 1][$j - 1] + $triangle[$i - 1][$j];
}
}</p><p>// 输出(简单左对齐)
foreach ($triangle as $row) {
echo implode(' ', $row) . "\n";
}三、优化版:节省空间的一维数组
若只需输出不保存全部数据,可用单个数组滚动更新,减少内存占用:
- 从后往前更新当前行,避免覆盖上一行未使用的值
- 第i行需更新i−1个中间位置(索引1到i−1)
- 适合行数极大但仅需实时显示的场景
四、美化输出:居中对齐排版
纯文本中模拟三角形效果,需计算每行宽度并补空格:
立即学习“PHP免费学习笔记(深入)”;
- 假设数字最大位数为d(如n=10时最大数是252,取d=3),则每数占d位,间隔1空格
- 第i行总字符宽 ≈ (i × d) + (i − 1),居中需前置空格数 = 总宽_max − 当前行宽)/ 2
- 用 str_repeat(' ', $spaces) 拼接,再 echo;或 sprintf 格式化数字对齐
不复杂但容易忽略格式细节,动手写一遍就能掌握本质。



















