2016-10-28 98 views
0

我真的很困惑以下功能的结果。我知道,它的一小段代码,但我认为有足够的信息来了解什么是应该发生的:混淆功能输出

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))); 
    } 

是数组键 - >开始于0;

$ dateCount是数组的大小(以阻止它在31天或多么漫长的范围)

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

$的startDate是已投入,但转化为当天去年的日期 - 在这种情况下提出的日期是2016年10月1日和转换后的日期是2015年9月26日

我想如果日期相等,那么用YAY字回显数组的数字,否则用字boo回显数组的数字。

与日期一样,k每循环增加1。

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

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

0 ==> 2015年9月26日==> 2015年9月26日

0 ==>嘘==> 2015年9月26日

1 ==> 2015年9月27日==> 2015年9月27日

1 ==> YAY

2 ==> 2015年9月28日== > 2015-09-28

2 ==> YAY

3 ==> 2015年9月29日==> 2015年9月29日

3 ==> YAY

4 ==> 2015-09 -30 ==> 2015年9月30日

4 ==> YAY

5 ==> 2015年10月1日==> 2015年10月1日

5 ==> YAY

6 ==> 2015年10月2日==> 2015年10月2日

6 ==> YAY

7 ==> 2015年10月3日==> 2015年10月3日

7 ==> YAY

8 ==> 2015年10月4日==> 2015年10月4日

8 ==> YAY

9 ==> 2015-10 -05 ==> 2015-10-05

9 ==> YAY

10 ==> 2015年10月6日==> 2015年10月6日

10 ==> YAY

11 ==> 2015-10 -07 ==> 2015年10月7日

11 ==> YAY

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

我一直在试图理解了这么久,现在任何想法将有助于

谢谢

+1

尝试使用''的var_dump回声,而不是()获取更详细的信息(变量类型等) - 也:在进入之前,你如何定义$的startDate循环? –

+0

猜测:在第一个日期字符串中有一个尾部空间或其他不可见字符... – deceze

+0

显示'$ startDate'的初始声明 – Justinas

回答

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

+0

是的,谢谢你 - 我也这么做了,它也做了同样的事情。我无法弄清楚为什么每次都得到同样的东西时它会这么做? – Andrew

+0

该死的。也是我的第一个想法,但无法证实。 SO的格式化删除了尾部空格,只有在输入编辑功能时才可见。 –

+0

@Andrew检查你的'$ this-> getLastYearDate($ start)'是否引入空间。可能是'日期'('Y-m-d')'或其他东西 –