为什么这个时间戳比较总是评估为真?

时间:2012-08-03 08:24:59

标签: php if-statement timestamp compare

我有以下代码来查看分配的时间是否已经过去。 对于我的演示,它应该全部评估为假,没有任何事情发生。 发生的事情就是它解析为true,即使我将它与> =

进行比较

为什么我会遇到这种奇怪的行为?

$data = '[{"ip":"80.61.150.173","endtime":1343988643},{"ip":"80.61.150.173","endtime":1343988649},{"ip":"80.61.150.173","endtime":1343988650},{"ip":"80.61.150.173","endtime":1343988664},{"ip":"80.61.150.173","endtime":1343988682},{"ip":"80.61.150.173","endtime":1343988723}]';
$json = json_decode($data,true);
foreach($json as $key => $obj)
    {
    var_dump($obj);
    echo "<BR>";
    var_dump(time());
    echo "<BR>";
    if($obj['endtime'] <= time());
        {
        echo "<BR>bliep<P>";
        }
    }

此代码评估此结果:

  

array(2){[“ip”] =&gt; string(13)“80.61.150.173”[“endtime”] =&gt;   int(1343988643)}
  int(1343981967)

     

bliep array(2){[“ip”] =&gt; string(13)“80.61.150.173”[“endtime”] =&gt;   int(1343988649)}
  int(1343981967)

     

bliep

     

array(2){[“ip”] =&gt; string(13)“80.61.150.173”[“endtime”] =&gt;   int(1343988650)}
  int(1343981967)

     

bliep

     

array(2){[“ip”] =&gt; string(13)“80.61.150.173”[“endtime”] =&gt;   int(1343988664)}
  int(1343981967)

     

bliep

     

array(2){[“ip”] =&gt; string(13)“80.61.150.173”[“endtime”] =&gt;   int(1343988682)}
  int(1343981967)

     

bliep

     

array(2){[“ip”] =&gt; string(13)“80.61.150.173”[“endtime”] =&gt;   int(1343988723)}
  int(1343981967)

     

bliep

正如你所看到的,那里有所有不应该存在的blieps。 时间戳是整数,当前时间小于节省的时间。 它应该很容易比较,但它总是评估为真,而现在是&lt;而不是存储的时间戳。

这里发生了什么?

这不是我的服务器,因为此代码在http://writecodeonline.com/php/

上的评估结果为true

2 个答案:

答案 0 :(得分:3)

我相信如果你的;声明,最后会有一个拼写错误if

应该

if($obj['endtime'] <= time());

而不是

if($obj['endtime'] <= time())

答案 1 :(得分:1)

由于

if($obj['endtime'] <= time());

应该是

if($obj['endtime'] <= time())//without the semicolon

虽然你有答案,但我认为很高兴知道为什么它没有抛出错误。

基本上if($obj['endtime'] <= time());被解释为 short 或单行if语句:

if($obj['endtime'] <= time())
    echo 'foo';
else
    echo 'bar';

但是由于if语句和分号之间没有语句,php将继续执行,而且 - 烦人地IMO-忽略大括号。我不确定这一点,但如果你在下一行有一个else{},你可能会遇到错误......
一个很好的例子,说明支持各种语法会给你带来如此激烈的头痛。也就是说,我喜欢你的编码风格,在新线上保持打开和关闭卷曲。提高可读性恕我直言。