在DateTime对象数组中循环


Looping through a DateTime object array

我一直在努力遍历php的对象。我在数组中有以下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 } 

谢谢。

您可以在这里找到一个ideone示例。

从本质上讲,您当前的代码正在尝试访问数组的$key上的成员变量date,因此它正在尝试执行以下操作:;

echo 0->date;

PHP并不完全理解你的意思,所以你不会得到你期望的输出。您想要做的是访问值(实际的DateTime对象),并使用它来输出日期,就像这样;

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

您需要记住,您正在处理DateTime对象,所以仅仅尝试访问->date不会像您预期的那样工作。据我所知,DateTime对象不允许你直接访问它的属性,相反,如果你想打印出日期,你必须使用它的公共函数,而不是->format()

你可以在这里找到DateTime的完整文档

编辑:如@barat所述,您将不再需要$key => $value,因为您没有尝试访问$key,因此可以省略$key:

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