0

有没有更专业或更简单的方法来实现 PHP for 循环,当只有剩余元素时也会迭代?(在当前示例中:1126)

<?php
$max = 11126;
$step = 2000;

for ($i = 0; $i < $max; null) {
    if ($max - $i > $step) {
        $i += $step;
    } else {
        $i += $max - $i;
    }

    echo($i . ", ");
}

?>

输出:

2000, 4000, 6000, 8000, 10000, 11126, 

...这是正确的,但看起来代码太多了。

4

2 回答 2

3

好吧,由于循环已经有继续的决定,总是有一些东西要输出,因为$max已经是出口:

示例/演示

for ($i = 0;  ($i += $step) < $max;) {
    echo $i, ', ';
}
echo $max;

程序输出:

2000, 4000, 6000, 8000, 10000, 11126

接下来的一切都只是一些旧的玩弄......


要准确创建输出(末尾有逗号),您可以使用不同类型的循环来检查循环后的循环:

示例/演示

$i = 0;
do {
   $i += $step;
   echo min($i, $max), ', ';
} while ($i < $max);

程序输出:

2000, 4000, 6000, 8000, 10000, 11126, 

或者为什么不使用for前置条件输出的循环?

示例/演示

for (
   $i = 0;
   printf('%d, ', min($i += $step, $max)) 
   && ($i < $max);
);

程序输出:

2000, 4000, 6000, 8000, 10000, 11126, 
于 2013-08-30T19:37:32.450 回答
0

我不知道我的解决方案是否更“专业”,但它至少给了你一个不同的解决方案;)

$showSteps = function($max, $step) {
    $arr = array();
    for ($i = $step; $i <= $max; $i = $i + $step) {
        $arr[] = $i;
    }

    if (($max % $step) > 0) {
        $arr[] = intval($max/$step) * $step + $max % $step;
    }

    print implode(', ', $arr);    
};

$showSteps(11126, 2000);
于 2013-08-30T21:20:09.610 回答