我正在尝试使用php打印星形图案。我想打印这个:
*
**
***
****
*****
我的代码:
for($i=1; $i<=5; $i++){
for($j=1; $j<=5; $j++){
if($j>= (6-$i)){
echo "*";
} else {
echo " ";
}
}
echo "<br>";
}
通过这样做,我应该超越模式,但相反,我得到了这个:
*
**
***
****
*****
任何人都可以告诉我为什么会这样吗?提前谢谢。
答案 0 :(得分:1)
HTML文档中的额外空格字符对渲染输出没有影响。如果查看输出页面源,您将看到正在获得正确的结果。您可以选择以下选项:
1)发送Content-Type: text/plain
标题:
header('Content-Type: text/plain');
务必将<br>
代码更改为换行符("\n"
,"\r\n"
或PHP_EOL
)
2)用<pre>
标签
echo '<pre>';
for($i=1; $i<=5; $i++){
for($j=1; $j<=5; $j++){
if($j>= (6-$i)){
echo "*";
} else {
echo " ";
}
}
echo "<br>";
}
echo '</pre>';
3)使用不间断的空格:
for($i=1; $i<=5; $i++){
for($j=1; $j<=5; $j++){
if($j>= (6-$i)){
echo "*";
} else {
echo " ";
}
}
echo "<br>";
}
另一方面,如果没有额外的for
循环和if/else
语句,这里的内容将与您尝试执行的内容完全相同:
for ($i=1; $i<=5; $i++) {
echo str_pad(str_repeat('*', $i), 5, ' ', STR_PAD_LEFT) . PHP_EOL;
}
答案 1 :(得分:0)
老实说,我正在使用str_pad()
。但是,如果您需要为类分配使用循环,那么递减$j
似乎更容易。
for($i=1; $i<=5; ++$i){
for($j=5; $j>0; --$j){
echo $i < $j ? " " : "*";
}
echo "\n";
}
当渲染为html时,您需要使用
来显示连续的空格,并使用<br>
来换行。或者,如果您的字体是为空格和星号提供不同字符宽度的字体,则可以通过更改字体来同步宽度,或使用<span style="visibility:hidden">*</span>
作为非星号。
将你的片段带到phptester.net,看看它是如何呈现为html。