【问题标题】:PHP Number Pattern [duplicate]PHP数字模式[重复]
【发布时间】:2021-05-28 17:07:24
【问题描述】:

我一直在努力完成这项工作,但似乎无法成功。

public function MarioFlagpole($a){
    $x = 1;
    if(is_numeric($a)){
    for ($i=2; $i<=$a+1; $i++){
      for($k = $a-1; $k > $i; $k--){
        echo "&nbsp;&nbsp;";
        }
      for ($j=1; $j<=$i; $j++){
        echo $x;
        $x++;
      }
      echo "<br>";
    }
    }
    else{
        echo "Invalid Input";
      }
    }

如果$a = 5,输出应该是这样的

          12
         345
        6789
  1011121314
151617181920

但我一直得到这个输出

  12
 345
6789
1011121314
151617181920

【问题讨论】:

  • 使用空格字符的计数器是格式化任何类型的文本输出的一种糟糕的方式。如果您使用的是 HTML,那么我建议您改用 CSS 样式填充。或者只是将数字右对齐。
  • 所以你的问题是文本对齐?我不知道您使用的算法,但我猜您需要计算所有内容,然后格式化。
  • 把它包裹在
  • stackoverflow.com/questions/67723586/… 有相同的模式,并给出了如何填充它的建议
  • 这是一个课堂项目吗?两个问题中的问题和数字是相同的。

标签: php html codeigniter


【解决方案1】:

您可以连接每行的数字并将它们视为字符串。 将所有这些行收集到 rows 数组中。现在,计算每一行的空格 通过用最后一行减去当前行长度,差异是那些 许多空间。我通常更喜欢使用 PHP CLI 来检查我的输出,但我添加了 &lt;br/&gt;&amp;nbsp; 供您在浏览器上查看。

<?php

function MarioFlagpole($a){
    if(!is_numeric($a)) return "Invalid Input";
    $rows = []; 
    $x = 1;
    for ($i=2; $i <= $a+1; $x += $i , $i++){  
        $y = $x;
        for ($j=1; $j < $i; $j++){
            $y = $y . ($x + $j);                        
        }        
        $rows[] = $y;       
    }   
    
    foreach($rows as $row){
        echo str_repeat("&nbsp;", strlen($y) - strlen($row)),$row,"<br/>";
    }
}

MarioFlagpole(5);

【讨论】:

  • 您能否具体说明每个变量的用途。我有点困惑,因为我是新手,我想了解你所做的逻辑。谢谢!
  • @TheNoobOne $x 是一个以 $i 递增的计数器,帮助我们为每一行设置一个起始编号。 $y 捕获该行中连接的所有数字。
猜你喜欢
  • 2015-12-28
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 2016-07-05
  • 2020-10-16
  • 1970-01-01
相关资源
最近更新 更多