Nazir Hussain
Nazir Hussain

Reputation: 41

I want a PHP for loop that goes to certain number and again starts from zero

I want a PHP for loop that goes to certain number say "23" and again starts from "0". Actually I want for the listing of time in 24 hours format and suppose a case is: I have to show time from 9 AM to 2 AM (i.e 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;
}

Please suggest a way.

Upvotes: 0

Views: 175

Answers (9)

Nazir Hussain
Nazir Hussain

Reputation: 41

Thanks everybody for your help, using your ideas I got my work done. Here is the code that actually worked.

$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++;
}

Upvotes: 0

Volvox
Volvox

Reputation: 1649

Maybe better to use 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>';
}

or better 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>';
}

Upvotes: 0

Mina
Mina

Reputation: 1516

Does it have to be a for loop? You can try this

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

Upvotes: 0

asarfraz
asarfraz

Reputation: 518

Check this out. Hope this helps

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

}

Upvotes: 0

internals-in
internals-in

Reputation: 5038

Again late to Answer , Try this

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

}

?>

Upvotes: 0

Janak Prajapati
Janak Prajapati

Reputation: 886

Try this its working

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

?>

Upvotes: 0

Jon
Jon

Reputation: 4736

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

Reason, the line $end_time += ($end_time < $start_time) ? 24 : 0; checks to see if the end time is less than the start time (which we assume means the next day), and if it is, it adds 24 hours to it. The line $i %24 is the modulus operator which will divide the number and give the remainder, so if it's 25, it will give you 1 back. Note that all hours being worked with will need to be in 24 hour format to use this method.

Upvotes: 2

stephenfrank
stephenfrank

Reputation: 2895

Since your use-case mentions time-sensitive information you might be best off learning to use the date and strtotime functions (or the DateTime classes):

$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.

Upvotes: 2

JJJ
JJJ

Reputation: 33163

You can use the modulo to deduct 24 from numbers when they're greater than 23.

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

Note that you need to be careful with this; if $end_time is greater than 23 it will be stuck in an infinite loop.

Upvotes: 0

Related Questions