循环通过阵列并回显标头&;每天的页脚


loop through array and echo a header & footer for each day

这应该很简单,但我想我遇到了一个心理障碍——我有一个mysql数组,其中包含每个事件的日期和名称。我想要每个单独的"一天"都有一个页眉和页脚。所以它看起来像这样:

New Day
     Event 1
     Event 2
End Day
New Day
     Event 3
     Event 4
End Day

到目前为止,我的代码看起来是这样的,但我只能显示标题:

$day = null;
foreach($events as $event) {
    if ($day != date('d', strtotime($event->date))) {
        echo "New day:<br />";
    }
        echo $event->name;
        $day = date('d', strtotime($event->date));
}

所以基本上我循环浏览并比较"$day"和$event->day。。。这解决了页眉,但我应该怎么做才能让页脚显示出来?

只需在编写页眉时编写页脚,然后在末尾编写一个即可。

基本伪码:

  1. 写入标头,将$day设置为第一个值
  2. 对于每个事件
    1. 如果$day与当前事件的日期不同,请写页脚,然后写页眉
    2. 写入事件信息
    3. 更新$day变量
  3. 写页脚

您只需添加几个小的即可完成此操作:

foreach($events as $event) {
    if ($day != date('d', strtotime($event->date))) {
        if ($day !== null) { // ADDED THIS
            echo "End day<br />";
        }
        echo "New day:<br />";
    }
    echo $event->name;
    $day = date('d', strtotime($event->date));
}
if ($day !== null) { // ADDED THIS
    echo "End day<br />";
}

这里的想法是"结束日"总是在"新的一天"之前,只有两个例外:

  • 第一个"新的一天"之前没有"结束日"
  • 最后一个"结束日"(如果有的话)不在任何事情之前

这两个条件直接对应于这两种情况:如果你看到了任何"新的一天"的输出(可以很方便地检查),那么你想在"新的日子"之前加上"结束的一天",并以同样的方式结束输出。