4

我知道我可以像这样用整个整数做一个正常的循环

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

问题:
我想循环一个不是整数而是浮点时间(45分钟)的循环。我希望结果是这样的:

0.45
1.30
2.15
3.00
3.45
...

PHP中是否有任何帮助函数来实现这一点?

4

7 回答 7

13

阅读评论并看到您实际上想要使用时间,您甚至可以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");
}
于 2012-12-04T13:58:24.183 回答
2

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

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

// 编辑

正如许多人指出的那样,浮点精度存在固有问题。上面的例子应该适用于小数字 $i < 100,但当数字变大时可能会出现问题。

于 2012-12-04T13:24:54.667 回答
1
for($i=0;$i<10;$i += 0.45)
{
   echo $i;
}

像这样的东西?

于 2012-12-04T13:24:29.937 回答
0

你可以简单地使用

for($i=0.0;$i<10.0;$i=$i+0.45)
{
   echo $i;
}
于 2012-12-04T13:27:55.753 回答
0

我不确定我是否会使用浮点值来控制循环本身,特别是考虑到它们不精确的倾向:-)

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

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

这允许使用整数控制循环,并简单地为您提供基于该整数的浮点值。

于 2012-12-04T13:28:14.727 回答
0

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

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

for($i=0, $j=0; $i < $MAX; $i += 45, $j = $i / 100)
{
    echo $j;
}
于 2012-12-04T13:26:23.620 回答
-1

也许是这样的:

for ($i=1; $i<=10; $i++) {
    echo $i * 0.45."<br />";
}
于 2012-12-04T13:26:15.240 回答