如何将递减的数字前置到循环中的字符串中


How to prepend a decremented number to a string in a loop?

我正在尝试制作一组三角形的递减线,如下所示:

5
45
345
2345
12345

我试过这个:

for($i=1;$i<=5;$i++)
{
    for($j=1;$j<=$i;$j++)
    {
        echo $j;
    }
    echo "<br>";
}

但它是先打印低数字,然后添加这样的递增数字:

1
12
123
1234
12345

内部循环需要倒计数,而不是向上计数。

你可以从极限中减去外循环的变量来获得起点并倒计时:

for ($i = 0; $i < 5; $i++)
{
    for ($j = 5 - $i; $j > 0; $j--)
    {
        echo $j;
    }
    echo "<br>";
}

或者也将外循环改变为从极限开始倒数。

for ($i = 5; $i >= 1; $i--)
{
    for ($j = $i; $j >= 1; $j--)
    {
        echo $j;
    }
    echo "<br>";
}

这很简单:

$max = 5;
echo "<pre>";
for($line=0; $line<$max; $line++) {
    $min_this_line = $max-$line;
    for($num = $min_this_line; $num <= $max; $num++) {
        echo $num;
    }
    echo "'n";
}
echo "</pre>";

输出:

5
45
345
2345
12345

我想我应该声明$peak值,然后使用for()循环将计数器递减到1,并使用implode()range()在循环中构建相应的字符串。

这不会超过两个for()循环,但对于相对较小的$peak值,没有人会注意到任何性能影响。

代码:(演示)

$peak = 5;
for ($i = $peak; $i; --$i) {
    echo implode(range($i, $peak)) , "'n";
}

或具有两个环路:(演示)

递减外循环,递增内循环。

$peak = 5;
for ($i = $peak; $i; --$i) {
    for ($n = $i; $n <= $peak; ++$n) {
        echo $n;
    }
    echo "'n";
}

两种输出:

5
45
345
2345
12345