#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;
}
}
Комментарии:
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
Ответ №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);
Там. Внутри цикла нет условий и вызовов функций, только математика.