我对以下功能的结果感到困惑。我知道这是一小段代码,但我认为有足够的信息来理解应该发生的事情:
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
第一个对我没有意义?它确实等于它应该的但是由于某种原因跳过它?此外,如果我对日期进行硬编码,那么它将起作用。
我一直试图理解这一点,因为任何想法都会有所帮助
谢谢
答案 0 :(得分:1)
从您的输出中我看到突出显示2015-09-26
也会选择尾随空格,而突出显示2015-09-27
没有尾随空格。
所以这意味着2015-09-26
!= 2015-09-26_
。使用trim($startDate)
或只检查这个尾随空格的来源。
同样在调试时最好使用var_dump($startDate); => string(11) "2015-09-26 "
。这样你也会看到字符串长度。
根据个人经验
将hello
与hello
进行比较后失败了。结果显示var_dump($var);
显示hello
长度为10.进一步调查表明它是\0h\0e\0l\0l\0o