在PHP中打印星形,它取一个值并打印这样的东西

时间:2014-10-14 17:39:03

标签: php ascii-art

如果输入为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";
}
?>

3 个答案:

答案 0 :(得分:4)

嵌套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 < 1无效。

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

$maxNum = $_GET['maxNum'];

并使用scriptname.php?maxNum=5

加载页面

答案 1 :(得分:2)

为你准备的单行:p

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

细分:

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

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

答案 2 :(得分:1)

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

这样的事情应该有效 -

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

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