我想要一个PHP for循环,它会转到某个数字并再次从零开始

时间:2013-09-19 10:23:14

标签: php for-loop

我想要一个PHP for循环,转到某个数字说“23”并再次从“0”开始。 实际上我想要24小时格式的时间列表,并假设一个案例是:我必须显示从上午9点到凌晨2点的时间(即9,10,11,12,13,14,....... .... 23,0,1,2)

$i= range(0,23);//it doest work as it creates an array containing a range of elements
$start_time = 9;
$end_time = 2;
for ($i = $start_time ; $i<= $end_time ; $i++)
{
    echo $i;
}

请建议一个方法。

9 个答案:

答案 0 :(得分:2)

由于您的用例提及时间敏感信息,因此您最好学会使用datestrtotime函数(或DateTime类):

$time = strtotime('2013-09-14 02:00');
$endTime = strtotime('2013-09-15 09:00');

while ($time <= $endTime) {
    echo date('Y-m-d H:i:s', $time)."\n";
    $time = strtotime('+1 hour', $time);
}

// 2013-09-14 02:00:00
// 2013-09-14 03:00:00
// 2013-09-14 04:00:00
// 2013-09-14 05:00:00
// etc.

答案 1 :(得分:2)

$start_time = 9;
$end_time = 2;

$end_time += ($end_time < $start_time) ?  24 : 0;

for ($i = $start_time; $i<= $end_time; $i++) {
    echo ($i % 24);
}

原因,行$end_time += ($end_time < $start_time) ? 24 : 0;检查结束时间是否小于开始时间(我们假设是第二天),如果是,则会增加24小时。行$i %24是模数运算符,它将除去数字并给出余数,所以如果它是25,它将返回1。请注意,所有使用时间都需要采用24小时格式才能使用此方法。

答案 2 :(得分:0)

当数字大于23时,您可以使用模数从数字中扣除24。

$start_time = 9;
$end_time = 2;
for( $i = $start_time; $i % 24 != $end_time; $i++ )
{
    echo $i % 24;
}

请注意,您需要小心这一点;如果$end_time大于23,它将陷入无限循环。

答案 3 :(得分:0)

试试这个工作

<?php
$i= range(0,23);//it doest work as it creates an array containing a range of elements
$start_time = 9;
$end_time = 2;
$max_value=23;
if($start_time>=$end_time)
{
    for ($i = $start_time ; $i<= $max_value; $i++)
    {
        echo $i;
    }
    for($i=0; $i<=$end_time; $i++)  
    {
    echo $i;    
    }
}
else
{
    for ($i = $start_time ; $i<= $max_value; $i++)
    {
        echo $i;
    }
}

?>

答案 4 :(得分:0)

答案迟到,试试这个

<?php
$start_time = 20;
$end_time = 10;

$maxTime=23;
$minTime=0;


for ($i = $minTime ; $i<=$maxTime - abs($start_time-$end_time) ; $i++)
{
    $validTime= $start_time +  ($i % $maxTime);
    $validTime= $validTime>$maxTime?$validTime-$maxTime:$validTime;
    echo $validTime;

}

?>

答案 5 :(得分:0)

是否必须是for循环? 你可以试试这个

function hours($range, $recurse = true, $end = array())
{
  foreach($range as $time)
  {
    echo $time . "\n";
  }

  if($recurse && sizeof($end) > 0)
  {
    $range = range($end['start'], $end['end']);
    hours($range, false);
  }
}

$range = range(9,23);
$end = array('start' => 0, 'end' => 2);
hours($range, true, $end);

答案 6 :(得分:0)

检查一下。希望这有帮助

$start_time = 9;
$end_time = 2;

$flag = 1;
while($flag) [
    echo $start_time . "<br>";        
    $start_time++;
    if ($start_time == 23) { $start_time = 0; }
    if ($start_time == $end_time) {
        $flag = 0;
    }

}

答案 7 :(得分:0)

也许最好使用date

$hours = 8;
for ($i=1; $i<=8; $i++){
  echo 'TIME1 = '.date("Y-m-d H:i:s",mktime (20+$i,15,18,06,05,2013)).'<br>';
}

或更好DateTime class

$date = DateTime::createFromFormat('Y-m-d H:i:s', '2013-06-05 20:15:18');
$hours = 8;
for ($i=0; $i<8; $i++){
  $date->add(new DateInterval('PT1H'));
  echo 'TIME2 = '.$date->format('Y-m-d H:i:s').'<br>';
}

答案 8 :(得分:0)

感谢大家的帮助,用我的想法完成了我的工作。 这是实际工作的代码。

$start_time = some_dynamic_value;
$end_time = some_dynamic_value;
$i= $start_time;
$flag = false;
if($start_time > $end_time)
$flag = true;
while ($i <= $end_time || $flag)
{
        echo $i;

        if($i == 24)
        {
                $i= 0;
                $flag = false;
        }
        $i++;
}