代码:
$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 :(得分: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;
}
}
答案 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
答案 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);
有。循环内没有条件和函数调用,只有数学。