是没有嵌套循环可以在PHP循环中

时间:2017-03-15 15:15:21

标签: php integer

我想使用没有嵌套循环的循环来打印:

1
2   3
4   5   6   7
8   9   10  11  12  13  14  15
  • 第一行从1开始,只打印一个整数
  • 第二行从2开始并打印两个整数
  • 第三行从4开始并打印四个整数
  • 第四行从8开始并打印八个整数
  • (如果存在,则在其他行中的条件相同)

5 个答案:

答案 0 :(得分:3)

一对计数器应该可以做到这一点;

$threshold = 1;
$x = 1;
for($i = 1; $i <= 15; $i++) {
    echo $i . ' ';

    if($x == $threshold) {
        echo "<br>\n";
        $threshold = $threshold * 2;
        $x = 0;
    }

    $x++;
}

继续工作到无穷大,或者你的脚本内存不足。无论先发生什么:)

答案 1 :(得分:1)

您可以使用单个while和一些数组函数来实现。试试这个。

<?php
$start=1;
while($start<=10){
    $array = range($start,($start+$start-1));
    echo implode(' ',$array)."<br>";
    $start=$start*2;
}

?>

答案 2 :(得分:0)

这样的事情?

$i=1;
$t=1;
while($i<1000)
{
    if($i==$t)
    {
        if($t!=1) echo "<br />";
        $t=$t*2;
    }
    echo $i." ";
    $i++;
}

答案 3 :(得分:0)

您甚至可以在没有任何for和一些递归的情况下执行此操作; - )

<?php

$elements = range(1,15);

display($elements);

function display(array $parts, $step = 1) {
    if(! count($parts)) {
        return;
    }

    $elements = array_splice($parts, 0, $step);
    echo implode("\t", $elements)."\n";
    display($parts, $step * 2);
}

查看https://eval.in/755277

上的工作代码

答案 4 :(得分:0)

同样的事情,但有log($ i,2)。

<?php

$i=1;

while($i<20)
{
        echo $i;
        $i++;
        if(filter_var(log($i,2), FILTER_VALIDATE_INT))
                echo PHP_EOL;
        else
                echo "\t";
}