2012-12-04 94 views
4

我知道我可以做一个正常的循环与全整数这样For循环递增时间45分钟

for($i=0;$i<10;$i++) 
{ 
    echo $i; 
} 

问题:
我通过一个循环不是整数,但与 要循环漂浮 次(45分钟)。我想要的结果是这样的:

0.45 
1.30 
2.15 
3.00 
3.45 
... 

PHP中是否有任何帮助函数来实现它?

+2

你试过了吗? PHP文档没有说明在for循环中不支持浮点数。 –

+1

那些应该是时代? –

+0

乘以100,循环再分。 – dmaij

回答

12

阅读注释,并看到你真的想用时间来工作,你甚至可以用一个DateTime对象内部的for循环

下面是一些示例代码:

for (
    $d = new DateTime('00:00'), // Initialise DateTime object . 
    $i = new DateInterval('PT45M'); // New 45 minute date interval 
    $d->format('H') < 10; // While hours (24h) less than 10 
    $d->add($i) // Add the interval to the DateTime object 
) 
{ 
    echo $d->format("H:i\n"); 
} 
+1

+1给你先生。删除我的答案,这是好得多。 –

1
for($i=0;$i<10;$i += 0.45) 
{ 
    echo $i; 
} 

这样的事情?

+1

您与'Kami'有相同的代码错误我怀疑复制并粘贴 – Baba

+0

对不起,但是这段代码没有任何错误,它是正确的语法:) –

+1

仅供教育用途,请参阅http://codepad.org/9D4pgW63外观在'776'在输出 – Baba

2

您可以简单地在循环中使用浮动。 $i++在循环的最后部分意味着增加计数器1。只需将其更改为0.45即可完成。

for($i=0;$i<10;$i=$i + 0.45) 
{ 
    echo $i; 
} 

//编辑

正如许多人所指出的那样,有一个与浮点精度固有的问题。上述示例应为适用于小数字$i < 100,但数字变大时可能会出现问题。

+0

人们在投票前测试代码?修复代码中的错误 – Baba

+1

@Baba:无法修复,因为问题本身已被破坏。 –

+0

@ IgnacioVazquez-Abrams ..我同意你 – Baba

-1

也许是这样的:

for ($i=1; $i<=10; $i++) { 
    echo $i * 0.45."<br />"; 
} 
0

我不会依赖于该浮点数。原因是四舍五入。

你通常做的是使用一个int,然后除法。

for($i=0, $j=0; $i < $MAX; $i += 45, $j = $i/100) 
{ 
    echo $j; 
} 
0

你可以简单的使用

for($i=0.0;$i<10.0;$i=$i+0.45) 
{ 
    echo $i; 
} 
0

我不知道我会使用浮点值来控制循环本身,尤其是考虑到他们的不精确性倾向:-)

由于您似乎有一个公式,您可以简单地使用循环内的公式:

for ($i = 0; $ < 10; $i++) { 
    $num = 0.45 + $i * 0.85; 
    echo $num; 
} 

这允许循环由一个整数控制,并且简单地给出基于该整数的浮点值。