【问题标题】:Function doesn't come to the end功能没有结束
【发布时间】:2015-11-24 21:28:41
【问题描述】:
$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);

它正在加载,加载和加载,因为isset($foo[$time]) === false 似乎总是正确的。我就是找不到错误。

(要提交更多文本。要提交更多文本。要提交更多文本。)

【问题讨论】:

  • 在我看来,这当然取决于您第一次执行bar 时指定的start value。因为您总是添加1 day,它解析为86400 seconds,并且您指定的时间戳是11/26/201511/25/2015,两者都位于11:00 pm。因此,如果您使用与 11:00 pm 不同的初始 $time 来调用 bar,它当然不会起作用。
  • 其实1448319600应该代表11/24/2015 00:001448578800应该代表11/27/2015 00:00

标签: php timeout do-while


【解决方案1】:

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

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

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

【讨论】:

  • 但是他将初始值指定为strtotime的参数,对吧?
  • 是的,但它是time(),所以实际上总是“现在”,然后每次添加固定的 86,400(1 天的秒数)。数组中只有两个时间点,用半随机 time() 值击中其中任何一个的可能性都不太可能。这有点像循环$i = 0,2,4,6,etc..。并想知道为什么它没有停止,因为您正在测试 $i=5,而这从未发生过
  • 哈哈哈 - 确切地说,我没有抓住代码的第一行:D 我已经怀疑(并评论)这是一个可能的原因 :-) 给了你一个支持 ;-)
  • 谢谢!使用$time = strtotime('today') 它可以工作。 :)
【解决方案2】:

在脚本开始时,您将时间设置为当前时间。然后在您的 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

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2021-04-21
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多