坚持使用数字模式打印逻辑。让我知道我做错了什么,因为我的文件只是执行而没有给我一个模式。
我的代码 -
<?php
$num = 4;
for( $j=1 ; $j <= $num ; $j++ )
{
for( $i=$j ; $i < $num-1 ; $i++ )
{
echo " ";
}
for( $j ; $j >= 1 ; $j-- )
{
echo $j." ";
}
echo "<br />";
}
实现模式 -
1
21
321
4321
更新
在应用新的更改后,屏幕截图---
答案 0 :(得分:5)
for ($i = 1; $i <= 4; $i++) {
echo str_pad(implode('', range($i, 1)), 4, ' ', STR_PAD_LEFT) . '<br />';
}
使用CSS右对齐
echo '<div style="text-align:right;">';
for ($i = 1; $i <= 4; $i++) {
echo implode('', range($i, 1)) . '<br />';
}
echo '</div>';
答案 1 :(得分:2)
您的错误位于上一个for
,由于您已经在循环播放,因此该错误不应该存在。
并创建一个新变量,用于保存下一个增量的打印文本。
<?php
$num = 4;
$wrap = '';
for( $j=1 ; $j <= $num ; $j++ )
{
for( $i=$j ; $i < $num ; $i++ )
{
echo " ";
}
echo $wrap = $j.$wrap;
echo "<br />";
}
?>
答案 2 :(得分:2)
根本原因是浏览器不会只渲染第一个空格,你可以通过使用非空格html实体 
来代替空格来克服这个问题。
Soooo,如果你想让你的实际模式看起来像:
1
21
321
4321
并不喜欢:
1
21
321
4321
使用 
(编辑:实际使用 [space]
因为1似乎无法补偿1
字符与4
的宽度
<?php
$num = 4;
$result = array();
foreach(range($num,1) as $i){
$result[] = str_repeat(' ',$num-$i).implode('',range($i,1)).'<br />';
}
echo implode('',array_reverse($result));
?>
或者您可以使用<pre>
标记,例如:
<?php
$num = 4;
$result = array();
foreach(range($num,1) as $i){
$result[] = str_repeat(' ',$num-$i).implode('',range($i,1)).PHP_EOL;
}
echo '<pre>'.implode('',array_reverse($result)).'</pre>';
?>
答案 3 :(得分:1)
就像现在一样,问题在于你的第三个(或第二个嵌套的)for
循环。
您不能在此处重复使用$j
作为计数器,因为$j
仍然在包含for循环中被主动使用。用以下代码替换for循环:
for( $k = $j ; $k >= 1 ; $k-- )
{
echo $k." ";
}
答案 4 :(得分:1)
以下是您的计划的代码,您可以转到Develepor hell了解更多此类模式
//外部寻找换行
for($ i = 1; $ i&lt; = 5; $ i ++){
// Loop added for spacing
for ($s = $i; $s<=10-$i; $s++) {
echo " ";
}
// Inner loop for printing required pattern
for ($j = $i; $j>=1; $j--) {
echo $j;
}
echo '</br>';
}