【问题标题】:Stuck with the number pattern printing in PHP坚持使用 PHP 中的数字模式打印
【发布时间】:2012-08-16 11:25:02
【问题描述】:

卡在数字模式打印逻辑上。让我知道我做错了什么,因为我的文件只是继续执行而没有给我一个模式。

我的代码--

<?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

更新

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

【问题讨论】:

  • 请指定我在我的代码中出现的逻辑错误

标签: php for-loop logic


【解决方案1】:
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 for str_pad 方法,你能告诉我上面的代码有什么问题吗..帮助我建立我的逻辑:)
  • 我猜这是因为您使用$j 进行外部和第二个内部循环。
  • 我不认为会导致他的期望。
  • @MihaiIorga 你是对的,它没有按正确的顺序打印检查我更新的帖子
  • @swapnesh 它们放置正确,但我猜你在浏览器中执行它?根据这有什么好处,我推荐text-align-css-property,但你也可以str_replace(' ', '$nbsp;', $string)(如果你愿意,但对齐不是固定长度空格的用途)。
【解决方案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 />";
}
?>

【讨论】:

  • @MihaiLorga 请检查我更新后的截图和截图..空格放置不正确 -
  • @MihaiLorga 真棒它的工作..但如何大声笑???空格到底有什么问题???
  • NBSP 代表No-break space.&amp;nbsp; + (space) 是关键
  • @Mihailorga 感谢您提供的所有信息 ..really g8 :)
【解决方案3】:

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

Soooo,如果您希望您的实际模式看起来像:

   1
  21
 321
4321

而不喜欢:

1
21
321
4321

使用&amp;nbsp(编辑:实际上使用&amp;nbsp;[space],因为只有1 似乎无法补偿1 字符与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));
?>

或者您可以使用&lt;pre&gt; 标签,例如:

<?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>';
?>

【讨论】:

  • 哇 .. 你居然在你的 HTML 应用程序中添加了&lt;pre&gt; 标签?
  • @LawrenceCherone..它的工作原理是空格的问题???
  • 应该是str_repeat('&amp;nbsp; ',$num-$i),带有空格。你没有回答他的问题。 Kindly specify the logical error im doing in my code
【解决方案4】:

就目前而言,问题在于您的第三个(或第二个嵌套)for 循环。

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

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

【讨论】:

  • 请检查我更新后的帖子截图..空格放置不正确
【解决方案5】:

这是你的程序的代码,你可以去Develepor hell了解更多这样的模式

// 外寻找换行

对于 ($i = 1; $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>';

}

【讨论】:

    【解决方案6】:
    // 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 
    

    【讨论】:

    • 代码太多了!有没有机会加一段来解释这段代码?
    【解决方案7】:

    您的问题似乎是您将输出打印到 HTML 文档中,该文档将多个空格作为其默认行为。请参阅“Why does HTML require that multiple spaces show up as a single space in the browser?”要在打印时“保留”空格,请使用 &lt;pre&gt; 标记。

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

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

    代码:(Demo)

    $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>";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多