2013-08-31 42 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