菱形图案需奇数行,PHP中先校验$n为正整数,再用$n = $n % 2 ? $n : $n + 1转为奇数,上半部递增星号,下半部递减星号,构成对称菱形。

用PHP生成指定行数的菱形图案,关键在于拆解图形结构:上半部分(含中间行)是逐行增加星号的等腰三角形,下半部分是逐行减少星号的倒三角形。行数必须为奇数才能形成标准对称菱形,否则需做校正或提示。
输入处理与合法性校验
用户传入的行数 $n 应为正整数且为奇数。若为偶数,可自动调整为 $n+1 或 $n-1(推荐向上取最近奇数),并给出提示;若小于1,直接返回错误信息。
- 用 is_numeric($n) && (int)$n == $n 判断是否为合法整数
- 用 $n = $n % 2 ? $n : $n + 1 快速转为奇数
- 建议加一行:if ($n
计算每行星号数量与空格数量
设总行数为 $n,中间行为第 ($n+1)/2 行(从1开始计)。对任意行 $i(1 ≤ $i ≤ $n):
- 当前行距中心行的偏移量:$offset = abs($i - ($n+1)/2)
- 该行星号数:$stars = $n - 2 * $offset
- 左侧空格数:$spaces = $offset(居中对齐用)
例如 $n=5 时,第1行:$offset=2 → $stars=1,$spaces=2;第3行:$offset=0 → $stars=5,$spaces=0。
立即学习“PHP免费学习笔记(深入)”;
拼接并输出每行字符串
使用 str_repeat() 生成空格和星号,避免循环拼接。每行格式为:str_repeat(' ', $spaces) . str_repeat('*', $stars)。注意不要在末尾加多余空格,否则影响显示效果。
- 完整循环写法:for ($i = 1; $i
- 可选:用 ob_start() 缓存输出,最后统一 echo,便于调试或返回字符串
- 如需HTML页面显示,把空格换成 ,并用 <pre> 包裹保持格式
封装成可复用函数
将逻辑封装为函数,支持参数默认值和灵活调用:
function drawDiamond($n = 5) {
if (!is_numeric($n) || (int)$n != $n || $n < 1) {
return "请输入正整数";
}
$n = $n % 2 ? $n : $n + 1;
$result = [];
for ($i = 1; $i <= $n; $i++) {
$offset = abs($i - ($n + 1) / 2);
$stars = $n - 2 * $offset;
$spaces = $offset;
$result[] = str_repeat(' ', $spaces) . str_repeat('*', $stars);
}
return implode("\n", $result);
}
echo drawDiamond(7);



















