2013-08-31 61 views
0

我有一個日期排序數組。我想從特定的開始日期到特定的結束日期,並且每次在數組中找到給定日期時都會增加一個變量。我試着用下面的代碼片段:PHP的週期與DateTime對象

$result = array(); 
$iterator = 0; 
for ($minDateTime = new DateTime($minDate); $minDateTime <= new DateTime($maxDate); $minDateTime->add(new DateInterval('P01D'))) { 
    if ($minDateTime = $myDateArray[$iterator]) { 
     $iterator++; 
    } 
    array_push($result, "$minDateTime=>$iterator"); 
} 

如果我要運行該代碼,我得到了以下錯誤:

Fatal error: Call to a member function add() on a non-object in /home/pivoecom/public_html/teszt/query_test.php on line 34 

其中線34的開口的週期。我閱讀了DateTime的參考,我確信它有一個add方法。我試圖在循環之外添加這一行,並且它工作...我做錯了什麼?

+0

這似乎相當令人費解。雖然看起來這個方法看起來是邏輯錯誤http://stackoverflow.com/questions/9282287/what-c​​an-go-wrong-when-adding-months-with-a-dateinterval-and-datetimeadd,這似乎是更令人費解。如果你將這個'add'呼叫轉移到循環之外,你確定它有效嗎? – verisimilitude

+0

我確定。我嘗試過,因爲我的網絡服務器有一個太舊的PHP的想法。但它的工作。 – zsidanyi

回答

0

如果刪除了錯字您的代碼將工作: -

if ($minDateTime = $myDateArray[$iterator]) { 

應該是: -

if ($minDateTime == $myDateArray[$iterator]) { 

,或者可能: -

if ($minDateTime === $myDateArray[$iterator]) { 

我喜歡你的方式已經建立了循環,我從來沒有想過這樣做,我肯定會在將來使用它,但是我可能會這樣做: -

for ($minDateTime = new DateTime($minDate), $maxDateTime = new DateTime($maxDate); $minDateTime <= $maxDateTime; $minDateTime->add(new DateInterval('P01D'))) { 

因此,每次迭代都不會創建新的DateTime對象。

+0

這是問題謝謝:)。我認爲我有這樣的一些實例或更復雜的東西的問題,但修改後,循環正確運行。 – zsidanyi