功能没有到底

时间:2015-11-24 21:28:41

标签: php timeout do-while

<div>
  <img src="foo.jpg">
  <p>
    <span>bar</span>
  </p>
</div>

它正在加载,加载和加载,因为$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); 似乎总是如此。我只是找不到错误。

(还有一些文字可以提交。还有一些文字可以提交。还有一些文字可以提交。)

2 个答案:

答案 0 :(得分:3)

strtotime('+1day')将使用&#34;现在&#34; ,例如下午3:35作为基准时间,所以你做的相当于

$now = time(); // 1448400979
$tomorrow = strtotime('+1 day', $now); // 1448487379
while(!isset($arr[$tomorrow])) { ... }

由于该值很可能不会作为键存在于您的数组中,因此您的循环永远不会结束。您需要执行&gt; =比较或其他操作,以检查当前正在考虑的日期何时变得比数组中的任何键都大。

答案 1 :(得分:1)

在脚本开始时,您将时间设置为当前时间。然后在do while循环中,每次循环时将时间增加一天。 isset($foo[time]) === false只会在Mon, 23 Nov 2015 23:00:00 +0000Thu, 26 Nov 2015 23:00:00 +0000之前的某个时间恰好晚上11点开始时返回false并退出循环。

撰写这篇文章的时间戳示例是1448401349如果我添加一天,我会得到1448487749。

您可能希望将时间戳四舍五入到午夜,以确保在循环中出现允许其退出的冲突。 unix timestamp round to midnight