令人困惑的功能输出

时间:2016-10-28 09:05:26

标签: php function date if-statement while-loop

我对以下功能的结果感到困惑。我知道这是一小段代码,但我认为有足够的信息来理解应该发生的事情:

while ($k < $dateCount) {
        echo $k." ==> ".$forecastData[$k]['Booked Date']." ==> ".$startDate."<br>";
        if($forecastData[$k]['Booked Date'] == $startDate){
            echo $k." ==> YAY<br>";
        }
        else{
            echo $k." ==> boo ==> ".$startDate."<br>";
        }
        $k++;
        $startDate = date('Y-m-d', strtotime("+1 day", strtotime($startDate)));
    }

$ k 是数组键 - &gt;从0开始;

$ dateCount 是数组的大小(要在31天停止,或者距离范围很长)

$ forecastData 是一个包含日期所有销售数据的多维数组。 - 包含该日期的大量信息,包括预订日期,即存储信息的日期。

$ startDate 是投放日期但转换为去年同一天的日期 - 在这种情况下,投放日期为2016年10月1日,转换日期为2015年9月26日

我想说,如果日期相等,则使用单词YAY回显数组的编号,否则使用单词boo回显数组编号。

每个循环的k增加1,日期也是如此。

我还打印了循环的初始值,以显示比较结果。

我无法理解的是这是输出:

  

0 ==&gt; 2015-09-26 ==&gt; 2015-09-26

     

0 ==&gt;嘘==&gt; 2015-09-26

     

1 ==&gt; 2015-09-27 ==&gt; 2015年9月27日

     

1 ==&gt; YAY

     

2 ==&gt; 2015-09-28 ==&gt; 2015年9月28日

     

2 ==&gt; YAY

     

3 ==&gt; 2015-09-29 ==&gt; 2015年9月29日

     

3 ==&gt; YAY

     

4 ==&gt; 2015-09-30 ==&gt; 2015年9月30日

     

4 ==&gt; YAY

     

5 ==&gt; 2015-10-01 ==&gt; 2015年10月1日

     

5 ==&gt; YAY

     

6 ==&gt; 2015-10-02 ==&gt; 2015年10月2日

     

6 ==&gt; YAY

     

7 ==&gt; 2015-10-03 ==&gt; 2015年10月3日

     

7 ==&gt; YAY

     

8 ==&gt; 2015-10-04 ==&gt; 2015年10月4日

     

8 ==&gt; YAY

     

9 ==&gt; 2015-10-05 ==&gt; 2015年10月5日

     

9 ==&gt; YAY

     

10 ==&gt; 2015-10-06 ==&gt; 2015年10月6日

     

10 ==&gt; YAY

     

11 ==&gt; 2015-10-07 ==&gt; 2015年10月7日

     

11 ==&gt; YAY

第一个对我没有意义?它确实等于它应该的但是由于某种原因跳过它?此外,如果我对日期进行硬编码,那么它将起作用。

我一直试图理解这一点,因为任何想法都会有所帮助

谢谢

1 个答案:

答案 0 :(得分:1)

从您的输出中我看到突出显示2015-09-26也会选择尾随空格,而突出显示2015-09-27没有尾随空格。

所以这意味着2015-09-26!= 2015-09-26_。使用trim($startDate)或只检查这个尾随空格的来源。

同样在调试时最好使用var_dump($startDate); => string(11) "2015-09-26 "。这样你也会看到字符串长度。

根据个人经验
hellohello进行比较后失败了。结果显示var_dump($var);显示hello长度为10.进一步调查表明它是\0h\0e\0l\0l\0o