PHP:检测重复列结果的结束(日历日)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP:检测重复列结果的结束(日历日)相关的知识,希望对你有一定的参考价值。

我一直在组织一个简单的线性每周事件日历脚本,它调用来自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结束代码,但回想起来,这不是我想要的,显然它不起作用。

我认为我需要的是一种方法来确定我是否已达到某一天的最后一个条目(即我的数据库中的event_date),并将我的if子句基于此。但到目前为止,我很难理解我是如何表达这一点的。

我是在正确的轨道上,我将如何制定我的最终if条款?

谢谢!

答案

嗯,这不是一个真正的php解决方案,但我找到了一个我可以忍受的解决方法。

我更改了这一行:

if ($showday)  ?><div class="daybox">

对此:

if ($showday)  echo "</div><div class='daybox'>"; 

在日历的第一天之前,这给了我一个异常的结束div标签,但我通过在foreach循环之外放置一个开始div标签来协调我的HTML。 (在我的情况下,我已经获得了一个“本周”标题的h2,所以现在我已将标题包含在div中。)

这适用于这个特定的用例,但如果有人有正确的PHP答案,请随时提供。

另一答案

我的朋友安东尼是一名铁杆程序员,虽然不是真正的PHP人员,却提供了实际的代码来正确完成这项工作。

在$ weekday = date ...行下面,上面的代码已被替换为:

if ($currentDay != $weekday) 
    if ($currentDay != '') 
        echo "</div>";
    
    $currentDay = $weekday;
    $showday = true;
    echo "<div class='daybox'>";

?>
 <section class="calendar-item">
    <?php 
        if ($showday) 
            if ($weekday == "Sunday") 
                echo "<h3 class='sunday'>";
             else 
                echo "<h3>";
            
            echo $weekday;?>
            </h3><p class="date-detail"><?php
            echo date("F j", strtotime($row['event_date'])); ?></p><?php
            $showday = false;           
        

工作一种享受。现在我需要研究它以便完全掌握他是如何做到的。

以上是关于PHP:检测重复列结果的结束(日历日)的主要内容,如果未能解决你的问题,请参考以下文章

开始日期结束日期列上的 JSON Linq.js 过滤器

用于查询定期日历事件的 SQLite 语句

检测页面的滚动结束[重复]

检测CSS中的旋转结束[重复]

SQL 按键重复开始和结束日期

使用jQuery检测animate.css的动画状态和动画状态结束[重复]