1

我正在尝试的是这个

***
**
*

我这样做是这样的:

<?php
    $val = '*';
    for($i=1; $i<=3; $i++) {
            if($i == 1) {
                echo '***<br>';
            } elseif($i == 2) {
                echo '**<br>';
            } elseif($i == 3) {
                echo '*';
        }
    }
?>

现在确定这是一种笨方法......我想我需要在 for 循环中使用 while 循环,但不知道如何去做......

4

7 回答 7

2
<?php

for($i=3;$i>0;$i--)
{
echo str_pad("*", $i,"*");
echo "<br>";
}

?>
于 2013-02-04T10:59:19.710 回答
2

你去:

function stringTree($val = '*', $k = 3) {
    for($i = $k; $i > 0; $i--) {
            echo str_repeat($val, $i).'<br>';
        }
    }
}

然后对于您的具体示例,您可以调用:

stringTree('*', 3);

这将输出:

***
**
*

或者继续让它变得更大;例如:

stringTree('*', 6);

将输出:

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

或轻松更改字符:

stringTree('.', 4);

将输出:

....
...
..
.
于 2013-02-04T11:02:11.530 回答
1

强制性的 1-liner,有很多方法可以做到这一点。

for($i=3; $i; print str_repeat("*", $i--) . '<br />');

为了好玩:https ://codegolf.stackexchange.com/questions/4114/print-a-christmas-tree/6783#6783

于 2013-02-04T11:23:07.957 回答
1

使用str_repeat

str_repeat('*', 4-$i)

整个代码:

<?php
$val = '*';
for($i=1; $i<=3; $i++) {
    echo str_repeat($val, 4-$i) . '<br/>';
}
?>
于 2013-02-04T10:57:45.633 回答
1

我将解释一种可以理解的方式,

   $val = '*'; // Your star
    $count= 3; // Number of lines
    for($i=0; $i<$count; $i++) {
            $num= $count-$i; //number of lines to come
            for($j=0; $j<$num; $j++) {
            echo "*";
    }
    echo "<br />";
    }

输出

***
**
*

在这里测试

于 2013-02-04T11:02:36.750 回答
1
for ($counter = 1; $counter <= 10; $counter++)
{
    // display star, counter number of times
    for ($star_counter = 1; $star_counter <= $counter; $star_counter++)
    {
        echo "*";
    }
    echo "<br/>";
}
于 2013-02-04T11:00:47.690 回答
1
<?php
    $val = '***';
    while($val != '')
        echo $val . '<br/>';
        $val = substr($val, 0, -1);
    }
?>

这使您可以从任意数量的星星开始,并且不需要内部循环。

于 2013-02-04T11:00:51.497 回答