2

坚持使用数字图案打印逻辑。让我知道我做错了什么,因为我的文件只是在执行而没有给我一个模式。

我的代码——

<?php

$num = 4;

for( $j=1 ; $j <= $num ; $j++ )
{
    for( $i=$j ; $i < $num-1 ; $i++ )
    {
    echo "&nbsp;";
    }

    for( $j ; $j >= 1 ; $j-- )
    {
    echo $j."&nbsp;";
    }

echo "<br />";
}

实现模式——

   1
  21
 321
4321

更新

应用新更改后,以下是屏幕截图 ---

关于 STAR USEAGE

空白使用

4

7 回答 7

6
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>';
于 2012-08-21T06:29:34.743 回答
2

您的错误在最后一个for,因为您已经在循环,所以不应该存在。

并创建一个新变量,它将保存下一个增量的打印文本。

<?php

$num = 4;
$wrap = '';

for( $j=1 ; $j <= $num ; $j++ )
{
    for( $i=$j ; $i < $num ; $i++ )
    {
        echo "&nbsp; ";
    }

    echo $wrap = $j.$wrap;
    echo "<br />";
}
?>
于 2012-08-21T06:33:21.007 回答
2

根本原因是浏览器不会只渲染第一个空格,您可以通过使用不间断空格 html 实体&nbsp代替空格来克服这个问题。

太棒了,如果你希望你的实际模式看起来像:

   1
  21
 321
4321

而且不喜欢:

1
21
321
4321

使用&nbsp(编辑:实际上&nbsp;[space]仅使用 1 似乎无法补偿1char vs的宽度4

<?php 
    $num = 4;
    $result = array();
    foreach(range($num,1) as $i){
        $result[] = str_repeat('&nbsp; ',$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>';
?>
于 2012-08-21T06:49:56.913 回答
1

就像现在一样,问题在于您的第三个(或第二个嵌套)for循环。

您不能$j在这里只重用作为计数器,因为$j它仍在包含 for 循环中被积极使用。将 for 循环替换为:

for( $k = $j ; $k >= 1 ; $k-- )
{
    echo $k."&nbsp;";
}
于 2012-08-21T06:33:54.097 回答
1

这是您的程序的代码,您可以去Develepor 地狱了解更多这样的模式

// 外部寻找换行

对于 ($i = 1; $i<=5; $i++) {

// Loop added for spacing
for ($s = $i; $s<=10-$i; $s++) {
    echo "&nbsp;";
    }

// Inner loop for printing required pattern
for ($j = $i; $j>=1; $j--) {
    echo $j;
}

echo '</br>';

}

于 2014-01-25T16:22:41.910 回答
0
// Here is the code for your program,
// Pattern - 1

$num = 4;

// to print no. of rows
for( $i=1 ; $i <= $num ; $i++ )
{

    
    // To print white space
    for( $j=1 ; $j <= $num-$i ; $j++ )
    {
        echo "0";
    }
    
    // To print pattern
    for( $z= $i ; $z>=1 ; $z-- )
    {
        
        echo $z;
    }
    
    
    // To print new line
    echo "<br />";
}

==>> Output
0001
0021
0321
4321

//===================================================================//

Pattern - 2

$z=1;
$n=3;

# no of rows
for($i=1;$i<=$n;$i++)
{
# to check even or odd
if($i%2 == 0)
{
    # main logic to display in reverse order // right to left
    $z = ($z+$n) -1;

    $a = $z;
    for($j=1;$j<=$n;$j++)
    {
        echo $z--;
    }

    $z = $a+1;


}
else
{
    # display data left to right

    for($j=1;$j<=$n;$j++)
    {
        echo $z++;
    }
}

echo "<br/>";

}

==>> Output
123
654
789 
于 2022-01-01T06:52:13.910 回答
0

您的问题似乎是您将输出打印到 HTML 文档中,该文档将多个空格作为其默认行为。请参阅“为什么 HTML 要求多个空格在浏览器中显示为单个空格? ” 要在打印时“保留”空格,请使用<pre>标签。

我将添加一个基于数学的解决方案,而不是多个迭代函数调用和多个循环(受我在此处解释的答案的启发)。一旦您的数量限制高于 9,我不知道我的输出是否与您想要的输出一致。

实际上,我printf()习惯用空格将每一行填充到相同的最大长度。每个连续的数字打印整数与其值一样多次。

代码:(演示

$num = 4;
echo "<pre>";
for ($i = 1; $i <= $num; ++$i) {
    printf("% {$num}d<br>", (10 ** $i - 1) / 9 * $i);
}

HTML 输出(点击演示链接中的眼睛图标切换到 HTML 模式):

   1
  22
 333
4444

为了比较,这些也可以在for()循环内部工作(并提供高于 9 的更直观的结果):

printf("% {$num}d<br>", str_repeat($i, $i));

或者

echo str_repeat(' ', $num - $i) . str_repeat($i, $i) . "<br>";
于 2022-01-02T03:21:07.253 回答