2016-10-03 73 views
2

代碼:如何在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代碼?

+0

什麼是這裏'$ step'的目的? –

回答

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 
+1

我認爲這是對我來說很好的例子。謝謝 :) – Chinmay235

-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); 

那裏。循環中沒有條件和函數調用,只有數學。

+0

Downvotes沒有理由。真棒。 – DanMan

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

根據您的要求,您需要這裏do..while()循環。首次需要初始化$firstNum的值爲$start,然後進行循環時,請將$step添加到$lastNum中。然後回顯或存儲給定值。之後,你需要再次通過添加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

也許是這樣的:

<?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>"; 
} 
?> 
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

+0

你只是讓它比它更復雜0.0 –

+0

@dragoste不是真的... –

-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>"; 
} 
+0

問題在哪裏? –

-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>"; 
    }