如何在PHP中显示价格范围?

时间:2016-10-03 07:51:37

标签: php

代码:

$start = 8;
$end = 550;
$step = 100;

for($i=$start; $i<$end; $i=$i+$step){
    $firstNum = $i;
    $lastNum = $i + $step;
    echo $firstNum.' - '.$lastNum;
    echo "<br>";
}

输出:

8 - 108
108 - 208
208 - 308
308 - 408
408 - 508
508 - 608

我希望我的输出应该像 -

8 - 100
101 - 200
201 - 300
301 - 400
401 - 500
501 - 600

如何在PHP代码中执行此操作?

8 个答案:

答案 0 :(得分:4)

根据您的要求,您需要do..while()循环。首次需要使用$firstNum的值初始化$start然后进行循环时,通过将$lastNum添加到其中来指定$step。然后回显或存储给定的值。之后,您再次需要通过添加1来分配$firstNum

你需要这样的东西 -

$start = 8;
$end = 500;
$step = 100;
$lastNum = 0;
$firstNum = $start;

do{    
    $lastNum += $step;
    echo $firstNum.' - '.$lastNum."<br/>";
    $firstNum = $lastNum+1;
}while($lastNum <= $end);

答案 1 :(得分:3)

使用$step = 100;时,您必须将两个范围末端向下舍入到100的最接近倍数,但只需一个增量步骤,使用if条件即可完成此任务:

for ($i = $start; $i <= ceil($end / $step) * $step; $i++){
    if ($i % $step == 0) {
        echo $start, " - ", $i, PHP_EOL;
        $start = $i + 1;
    }
}

输出:

8 - 100
101 - 200
201 - 300
301 - 400
401 - 500
501 - 600

答案 2 :(得分:2)

通过一些数学运算,您可以计算出所需的迭代次数,然后添加一些小逻辑,您可以获得所需的结果。

$start = 8;
$end = 550;
$step = 100;

$iteration = ceil($end / $step); //Calculate how many iterations we need

for($i=0;$i<$iteration;$i++) {
    $n = range(($i*$step), ($i*$step)+$step); //Build an array of numbers

    if($i == 0) { //If it's the first iteration, start at "8"
        echo $start .' - '. end($n) . PHP_EOL;
    } else {
        echo current($n) + 1 .' - '. end($n) . PHP_EOL;
    }

}

https://repl.it/DmhN

答案 3 :(得分:1)

请稍微更改一下:

$min = 8;
$end = 550;
$step = 100;

for($i=0; $i<$end; $i=$i+$step){
    //use $min only once as an exception in first iteration 
    //also added here "+ 1"
    $firstNum = max($min,$i+1); 
    $lastNum = $i + $step; 
    echo $firstNum.' - '.$lastNum;
    echo "\n";
}

结果:

8 - 100
101 - 200
201 - 300
301 - 400
401 - 500
501 - 600

https://3v4l.org/fr4ro

答案 4 :(得分:1)

也许是这样的:

<?php
$start = 8;
$end = 550;
$step = 100;
for($i=$start; $i<$end; $i=$i+$step){
   $firstNum = $i;
   $lastNum = $i + $step;
   $sp = $start - 1;
   if($i!=8) {
       $firstNum = $firstNum - $sp;
   }
   $lastNum = $lastNum - $start;
   echo $firstNum.' - '.$lastNum;
   echo "<br>";
}
?>

答案 5 :(得分:-1)

试试这个:

for($i=$start; $i<$end; $i=$i+$step){
    $firstNum = $i + (($i==$start) ? 0 : 1);

    $lastNum = $i + (($i==$start) ? ($step - $start) : $step);
    $i = $lastNum-$step;

    echo $firstNum.' - '.$lastNum;
    echo "<br>";
}

答案 6 :(得分:-1)

对此问题的另一种看法: - )

    for ($n = (int) ($start / $step); $n < (int) ($end / $step) + 1; $n++)
    {
        $left = $n * $step + 1;
        if ($start > $left)
            $left = $start;
        $right = ($n + 1) * $step;
        echo $left . ' - ' . $right;
        echo "<br>";
    }

答案 7 :(得分:-3)

使循环从1开始,将每行的结果字符串放入数组中,然后使用str_replace()之类的内容更改第一行输出。然后在第二个循环或implode()打印结果。

$step  = 100;
$rows  = array();

for($i = 1; $i <= 6; $i++){
    $next = $i * $step;
    $rows[] = $next - ($step-1) .' - '. $next;
}

$rows[0][0] = 8;  // replace first letter in first line with "8"
echo implode("</br>", $rows);

有。循环内没有条件和函数调用,只有数学。