Как показать диапазон цен в PHP?

#php

#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?

Комментарии:

1. Какова цель $step здесь??

Ответ №1:

Согласно вашему требованию, вам нужен do..while() цикл здесь. В первый раз, когда вам нужно инициализировать $firstNum значение $start , а затем выполнить цикл, назначьте значение $lastNum , добавив $step в него. затем повторите или сохраните заданные значения. после этого вам снова нужно назначить $firstNum , добавив 1.

Вам нужно что-то вроде этого-

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

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

Комментарии:

1. Нет логики в цикле. Хорошо.

Ответ №2:

При использовании a $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
  

Ответ №3:

С помощью небольшой математики вы можете рассчитать необходимое количество итераций, а затем, добавив небольшую логику, вы можете получить желаемый результат.

 $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

Комментарии:

1. Вы только что сделали его более сложным, чем он есть o.0

Ответ №4:

Просто измените его немного так:

 $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

Ответ №5:

Может быть, так:

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

Ответ №6:

Попробуйте это:

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

Комментарии:

1. в чем проблема?

Ответ №7:

Другой взгляд на проблему 🙂

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

Ответ №8:

Сделайте так, чтобы цикл начинался с 1 , поместите результирующие строки для каждой строки в массив, а затем измените вывод первой строки на что-то вроде str_replace() . Затем выведите результаты во 2-м цикле или с 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);
  

Там. Внутри цикла нет условий и вызовов функций, только математика.