PHP: определить конец повторяющихся результатов столбца (календарный день) - PullRequest
0 голосов
/ 07 сентября 2018

Я собрал простой линейный сценарий еженедельного календаря событий, который вызывает записи из базы данных 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». Я могу создать / открыть div с этим, сразу после первого предложения if:

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

Это успешно открывает / создает новый div для каждого отдельного дня цикла foreach.

Проблема закрывается. Я попробовал соответствующий закрывающий код if show в конце foreach, но, оглядываясь назад, это было не то, что я искал, и, очевидно, это не сработало.

Мне кажется, что мне нужен способ определить, достигла ли я последней записи за данный день (т.е. событие_дата в моей базе данных), и основать на этом мое условие if. Но до сих пор я озадачен, как мне нужно сформулировать это.

Нахожусь ли я на правильном пути, и как бы я сформулировал свой последний пункт if?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Мой друг Энтони, хардкорный программист, хотя на самом деле не парень по 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;           
        }

Работает угощение. Теперь мне нужно изучить его, чтобы полностью понять, как он это сделал.

0 голосов
/ 08 сентября 2018

Ну, это не настоящее решение PHP, но я нашел обходной путь, с которым я могу жить.

Я изменил эту строку:

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

к этому:

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

Это дает мне аномальный закрывающий тег div перед первым днем ​​календаря, но я примирил свой HTML, поместив открывающий тег div вне моего цикла foreach. (В моем случае у меня уже был h2 для заголовка «Эта неделя», так что теперь я завернул заголовок в div.)

Это работает для этого конкретного случая использования, но если у кого-то есть правильный ответ PHP, пожалуйста, не стесняйтесь предоставить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...