Php 函数不';没有结束
它在加载,加载,加载,因为Php 函数不';没有结束,php,timeout,do-while,Php,Timeout,Do While,它在加载,加载,加载,因为isset($foo[$time])===false似乎总是正确的。我就是找不到错误 (更多的文本可以提交。更多的文本可以提交。更多的文本可以提交。)strotime(“+1day”)将使用“now”,例如下午3:35作为基准时间,因此您将执行与 $time = time(); $foo = array( 1448319600 => array( array( 'foo' => 'bar' )
isset($foo[$time])===false
似乎总是正确的。我就是找不到错误
(更多的文本可以提交。更多的文本可以提交。更多的文本可以提交。)strotime(“+1day”)
将使用“now”,例如下午3:35作为基准时间,因此您将执行与
$time = time();
$foo = array(
1448319600 => array(
array(
'foo' => 'bar'
),
array(
'bar' => 'foo'
)
),
1448578800 => array(
array(
'foo2' => 'bar2'
),
array(
'bar2' => 'foo2'
)
)
);
function bar($time, $foo) {
$count = 0;
do {
$count++;
$time = strtotime('+1 day', $time);
} while (isset($foo[$time]) === false);
return array(
'count' => $count,
'foo' => $foo[$time]
);
}
bar($time, $foo);
由于该值不太可能作为键出现在数组中,因此循环永远不会结束。您需要执行>=比较或其他操作,以检查当前正在考虑的日期何时大于数组中的任何键。strotime(“+1day”)
将使用“now”(现在),例如下午3:35作为基准时间,因此您正在执行与
$time = time();
$foo = array(
1448319600 => array(
array(
'foo' => 'bar'
),
array(
'bar' => 'foo'
)
),
1448578800 => array(
array(
'foo2' => 'bar2'
),
array(
'bar2' => 'foo2'
)
)
);
function bar($time, $foo) {
$count = 0;
do {
$count++;
$time = strtotime('+1 day', $time);
} while (isset($foo[$time]) === false);
return array(
'count' => $count,
'foo' => $foo[$time]
);
}
bar($time, $foo);
由于该值不太可能作为键出现在数组中,因此循环永远不会结束。您需要执行>=比较或其他操作,以检查当前正在考虑的日期何时大于数组中的任何键。在脚本开始时,您将时间设置为当前时间。然后在do-while循环中,每次循环时,您都将时间增加一天<当您的时间在2015年11月23日星期一23:00:00+0000或2015年11月26日星期四23:00:00+0000之前的某个晚上11点开始时,code>isset($foo[time])====false将只返回false并退出循环 例如,写这篇文章时的时间戳是1448401349,如果加上一天,我会得到1448487749
您可能希望将时间戳舍入到午夜,以确保循环中出现允许其退出的冲突 在脚本开始时,您将时间设置为当前时间。然后在do-while循环中,每次循环时,您都将时间增加一天<当您的时间在2015年11月23日星期一23:00:00+0000或2015年11月26日星期四23:00:00+0000之前的某个晚上11点开始时,code>isset($foo[time])====false将只返回false并退出循环 例如,写这篇文章时的时间戳是1448401349,如果加上一天,我会得到1448487749
您可能希望将时间戳舍入到午夜,以确保循环中出现允许其退出的冲突 在我看来,这当然取决于第一次执行
bar
时指定的start值。因为您总是添加1天
,解析为86400秒
,并且您指定的时间戳是11/26/2015
和11/25/2015
,都是在11:00 pm
。所以如果你用一个不同于晚上11点的bar
的$time
的首字母来调用bar
,它当然不起作用。实际上,1448319600
应该表示11/24/2015 00:00
,1448578800
应该表示11/27/2015 00:00
。在我看来,这当然取决于第一次执行bar
时指定的起始值。因为您总是添加1天
,解析为86400秒
,并且您指定的时间戳是11/26/2015
和11/25/2015
,都是在11:00 pm
。所以如果你用一个不同于晚上11点的bar
的$time
的首字母来调用bar
,它当然不起作用。实际上,1448319600
应表示11/24/2015 00:00
,1448578800
应表示11/27/2015 00:00
。但他将首字母指定为strotime
的参数,对吗?是的,但它是time()
,因此实际上总是“现在”,然后添加一个固定的86400(1天的秒)每一次。数组中只有两个时间点,使用半随机time()值命中其中任何一个的几率都不大。这有点像循环$i=0,2,4,6等等..
。我想知道为什么它没有停止,因为你正在测试$i=5
,这从来没有发生过哈哈哈-确切地说,我没有抓住代码的第一行:D我已经怀疑(并评论)这可能是一个原因:-)给了你一票;-)非常感谢。使用$time=strotime('today')
它可以工作。:)但他将初始值指定为strotime
,对吗?是的,但它是time()
,因此有效地总是“现在”,然后每次添加一个固定的86400(相当于1天的秒)。数组中只有两个时间点,使用半随机time()值命中其中任何一个的几率都不大。这有点像循环$i=0,2,4,6等等..
。我想知道为什么它没有停止,因为你正在测试$i=5
,这从来没有发生过哈哈哈-确切地说,我没有抓住代码的第一行:D我已经怀疑(并评论)这可能是一个原因:-)给了你一票;-)非常感谢。使用$time=strotime('today')
它可以工作。:)