【问题标题】:Print star in PHP which takes one value and print something like this在 PHP 中打印星号,它采用一个值并打印类似这样的内容
【发布时间】:2014-10-14 17:39:02
【问题描述】:

如果输入是3,那么输出应该是

***
**
*
**
***

同理,如果接受的值为 5,那么输出应该是

*****
****
***
**
*
**
***
****
*****

这是我所做的,但它不正确

<?php
echo "<pre>";
for ($row = 1; $row <= 5; $row++)
{
    for ($col = 1; $col <= 6 - $row; $col++)
    {
        echo '*';
    }

    echo "\n";
}
for ($row = 1; $row <= 5; $row++)
{
    for ($col = 1; $col <= $row; $col++)
    {
        echo '*';
    }

    echo "\n";
}
?>

【问题讨论】:

标签: php ascii-art


【解决方案1】:

嵌套的for 循环有什么用?

$lineBreak = "\r\n"; // This may need to be <br /> if carriage returns don't show in <pre>
$maxNum = 5;
echo '<pre>';
for ($i = $maxNum; $i > 0; $i--) {
    echo str_repeat('*', $i) . $lineBreak;
}
for ($i = 2; $i <= $maxNum; $i++) {
    echo str_repeat('*', $i) . $lineBreak;
}
echo '</pre>';

为了好玩,再消除一个for循环:

$lineBreak = "\r\n";
$maxNum = 5;
$out = '*';
for ($i = 2; $i <= $maxNum; $i++) {
    $out = str_repeat('*', $i) . $lineBreak . $out . $lineBreak . str_repeat('*', $i);
}
echo '<pre>' . $out . '</pre>';

请注意,此代码对$maxNum &lt; 1 无效。

要从用户那里获取值,请将 $maxNum 行替换为...

$maxNum = $_GET['maxNum'];

并使用scriptname.php?maxNum=5加载页面

【讨论】:

  • @RishiKulshreshtha 你是认真的吗?使用$_POST$_GET 并将值分配给$maxNum
【解决方案2】:

给你的单线:p

echo implode("\n",array_map(function($n) {return str_repeat("*",$n);},array_merge(range($input,1),range(2,$input))));

分解:

  • 创建从“输入”到 1 的数字范围
  • 创建从 2 到“输入”的数字范围(防止重复的“1”)
  • 合并两个范围,形成“先下后上”列表
  • 用适当数量的星号替换数组中的每个项目
  • 将它们粘在一起,形成新的线条。

请注意,您可能需要&lt;br /&gt; 而不是\n 才能在浏览器中输出。

【讨论】:

  • +1 太棒了,但我不会真的认为这是一个“单行”,因为它做了这么多,你可以轻松地将函数分解为多行以提高可读性。
【解决方案3】:

我认为你的教授在这里寻找递归..

这样的事情应该可以工作 -

function stars($num) {
  echo str_repeat('*', $num)."\n";

  if ($num > 1) {
    stars($num - 1);
    echo str_repeat('*', $num)."\n";
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2014-10-06
    相关资源
    最近更新 更多