我编写了一个简单的线性每周事件日历脚本,它调用mysql数据库中的条目。它显示一种“每周8天”(周日到周日)
我的mysql查询是这样的:
$results = $dbh->query('SELECT * FROM calendar WHERE YEARWEEK(event_date) = YEARWEEK(NOW()) OR (WEEKDAY(event_date) = 6 AND YEARWEEK(event_date) = YEARWEEK(NOW()) + 1) ORDER BY event_date ASC');
当给定的一天有多个事件条目时,我会防止日期标题重复:
$currentday = '';
$showday = true;
foreach($results as $row) {
$weekday = date("l", strtotime($row['event_date'])); {
if ($currentday != $row['event_date']) {
$showday = true;
$currentday = $row['event_date'];
}
if ($showday) {
$weekday = date("l", strtotime($row['event_date']));
if($weekday == "Sunday") {
echo "<h3 class='sunday'>";
echo $weekday;
}
else {
echo "<h3>";
echo $weekday;
}
echo date("F j", strtotime($row['event_date']));
$showday = false;
}
}
... 接下来是剩下的细节。
一切都很好。
我现在要做的是通过一个html钩子将每天的结果可视化地分组。
为了实现这一点,我尝试在一个div中使用“daybox”类对每天的事件进行分组。在第一个if子句之后,我可以使用以下命令创建/打开div:
if ($showday) { ?><div class="daybox">
它成功地为foreach循环的每一天打开/创建一个新div。
问题是关闭它。我在foreach的末尾尝试了一个相应的if$showday结束代码,但现在回想起来,这并不是我想要的,显然它不起作用。
我想我需要的是一种方法来确定我是否已经到达给定日期的最后一个条目(即数据库中的事件\日期),并将if子句建立在这个基础上。但到目前为止,我还不知道该如何表达。
我是否在正确的轨道上,我将如何制定我的最终如果条款?
谢谢!
2条答案
按热度按时间k3bvogb11#
嗯,这不是一个真正的php解决方案,但是我找到了一个我可以接受的解决方案。
我改了这句话:
对此:
这在日历的第一天之前给了我一个异常的结束div标记,但是我通过在foreach循环之外放置一个开始div标记来协调我的html(在我的例子中,我已经有了一个h2作为“本周”的标题,所以现在我把标题用div Package 起来。)
这适用于这个特定的用例,但是如果有人有正确的php答案,请随时提供。
r7s23pms2#
我的朋友anthony是一个铁杆程序员,虽然不是一个真正的php人,但他提供了正确完成这一任务的实际代码。
低于$weekday=日期。。。行,上面的代码已替换为:
工作是一种享受。现在我需要学习它,以便完全掌握他是如何做到这一点的。