2013-08-31 4 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, и я уверен, что для нее есть метод добавления. Я попытался добавить день с этой линией вне цикла for, и это сработало ... Что я делаю неправильно?

+0

Это кажется довольно озадачивающим. Несмотря на кажущуюся логическую ошибку с этим методом http://stackoverflow.com/questions/9282287/what-can-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

Смежные вопросы