2016-04-04 7 views
2

Я боролся с пересечением объектов php. У меня есть следующий объект DateTime в массиве, но у меня проблемы с его повторением. Что я делаю не так?Looping через массив объектов DateTime

// print_r($calendar_days); 
Array 
(
    [0] => DateTime Object 
     (
      [date] => 2016-04-06 00:00:00 
      [timezone_type] => 3 
      [timezone] => Europe/Helsinki 
     ) 

    [1] => DateTime Object 
     (
      [date] => 2016-04-13 00:00:00 
      [timezone_type] => 3 
      [timezone] => Europe/Helsinki 
     ) 

    [2] => DateTime Object 
     (
      [date] => 2016-04-20 00:00:00 
      [timezone_type] => 3 
      [timezone] => Europe/Helsinki 
     ) 

    [3] => DateTime Object 
     (
      [date] => 2016-04-27 00:00:00 
      [timezone_type] => 3 
      [timezone] => Europe/Helsinki 
     ) 

) 

PHP

<?php foreach ($calendar_days as $key => $value){ ?> 
    <a href="#"> 
    <div class="day-container"> 
     <strong> <?php echo $key->date; ?></strong> 
    </div> 
    </a> 
<?php } 

Спасибо.

+0

это должно быть '$ value-> date;'. – Yash

+0

Я пробовал это, но получил сообщение: Undefined property: DateTime :: $ date – user3442612

+1

' format ('Y-m-d H: i: s'); ?> ' –

ответ

1

Вы можете найти пример ideone here.

По существу ваш текущий код пытается получить доступ к переменной-члену date в массиве $key, поэтому он пытается сделать что-то вроде:

echo 0->date;

PHP точно не понимаю, что вы имеете в виду, так что вы не будете получать вывод, который вы ожидаете. То, что вы хотите сделать, - это получить доступ к значению (фактический объект DateTime) и использовать его для вывода даты вместо этого;

echo $value->format('Y-m-d H:i:s');

Вы должны помнить, что вы обработки DateTime объекты, так что просто пытается получить доступ к ->date не будет работать, как вы ожидаете. Для того, чтобы мне известно DateTime объект не позволяет напрямую обращаться к его свойствам и вместо этого, если вы хотите распечатать дату, вы должны использовать его общественные функции вместо ->format()

Вы можете найти полную документацию для DateTimehere

Edit: Как уже упоминалось @barat, вы больше не нужно $key => $value теперь, когда вы не пытаетесь получить доступ к $key так что вы можете опустить $key:

foreach ($calendar_days as $value) { ... }

+0

BTW ... если вы итерации через Array и не нужны ключи, просто сделайте это так: foreach ($ calendar_days as $ date) {echo $ date-> format ('Ymd H: i: s ');} – barat

+0

Да, вы этого не сделали, но, поскольку у него это было изначально, я думал, что просто оставлю его, чтобы оставить код ближе к оригиналу, и на всякий случай у него была другая причина использовать '$ key' – Mikey

+1

Мой комментарий больше о пользователе3442612 - Я уверен, что для вас это общее знание :) – barat