
本文讲解如何使用双重 for 循环在 php 中输出指定尺寸的空心矩形,通过条件判断控制边界字符与内部空格,避免直接修改循环变量导致逻辑错误。
本文讲解如何使用双重 for 循环在 php 中输出指定尺寸的空心矩形,通过条件判断控制边界字符与内部空格,避免直接修改循环变量导致逻辑错误。
要实现一个 11×11 的空心矩形(即外框为 *,内部全为空格),关键不在于“删除”已输出的内容,而是在输出阶段就决定每个位置该打印什么字符——这是循环控制的核心思想。你原代码中尝试用递减循环“回删”,不仅逻辑混乱(如内层 $i 覆盖外层 $i 导致无限循环),而且 PHP 无法实时擦除已发送到浏览器的 HTML 内容。
正确做法是:用外层循环控制行($i),内层循环控制列($j),再通过条件判断区分边界与内部:
- 边界条件:首行($i == 0)、末行($i == 10)、首列($j == 0)、末列($j == 10)→ 输出 *
-
内部区域:其余所有位置 → 输出空格 ' '
(注意:此处用半角空格,确保等宽对齐)
✅ 推荐的清晰写法:
<?php for ($i = 0; $i <= 10; $i++) {
for ($j = 0; $j <= 10; $j++) {
if ($i == 0 || $i == 10 || $j == 0 || $j == 10) {
echo '*';
} else {
echo ' ';
}
}
echo '<br />';
}
?>
✅ 简洁的三元运算符写法(适合熟悉语法者):
<?php for ($i = 0; $i <= 10; $i++) {
for ($j = 0; $j <= 10; $j++) {
echo ($i == 0 || $i == 10 || $j == 0 || $j == 10) ? '*' : ' ';
}
echo '<br />';
}
?>
⚠️ 注意事项:
- 切勿在循环中修改当前迭代变量(如你原代码中内层又用 $i 做计数器),会导致不可预测的跳变或死循环;
- 行/列索引从 0 开始,
-
必须放在内层循环外、外层循环内,确保每行结束后换行; - 若需适配任意尺寸,可将 10 抽象为变量(如 $size = 10),增强可维护性。
总结:绘制空心图形的本质是「按坐标逻辑决策输出」,而非事后删除。掌握条件分支与嵌套循环的协同,是构建各类 ASCII 图形(如菱形、三角形、棋盘)的基础能力。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











