2016-10-28 138 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')'或其他東西 –