Как проверить время наложения событий в массиве с помощью PHP?

1

Я использую пока печатать события в определенную дату с eventID, временем начала и окончания.

Как я могу проверить и распечатать, какое время перекрывается, с каким использованием PHP?

<?php
while (list($key, $event_row) = each($events)) {
    $times_array = array(
        $event_row[0],
        date('Y-m-d H:i:s', $event_row[1]),
        date('Y-m-d H:i:s', $event_row[2])
    );
    print_r($times_array);
}

Array ( [0] => 11 [0] => 2015-05-29 19:00:00 [1] => 2015-05-29 21:00:00 )
Array ( [0] => 13 [0] => 2015-05-29 19:00:00 [1] => 2015-05-29 21:00:00 )
Array ( [0] => 16 [0] => 2015-05-29 21:00:00 [1] => 2015-05-29 22:00:00 )

Пример вывода, который я бы хотел:

Event ID#: 11 overlaps with Event ID# 13.
Event ID#: 13 overlaps with Event ID# 11.
Event ID#: 16 doesn't overlap.
  • 3
    1. Какой у вас вопрос / проблема? 2. Какой выход вы получаете и чего бы вы ожидали?
  • 0
    Можете ли вы опубликовать var_export($events) ?
Показать ещё 1 комментарий
Теги:
arrays
datetime

1 ответ

2
Лучший ответ

См. Общий ответ для проверки того, перекрываются ли два диапазона дат. Для PHP вам нужно сравнить каждое событие со всеми другими событиями и проверить наличие конфликтов путем тестирования:

EndDate2 > StartDate1 AND EndDate1 > StartDate2

Пример кода:

<?php
$events = array(
    array("11", 1432918800 /*2015-05-29 19:00:00*/, 1432926000 /*2015-05-29 21:00:00*/),
    array("13", 1432918800 /*2015-05-29 19:00:00*/, 1432926000 /*2015-05-29 21:00:00*/),
    array("16", 1432926000 /*2015-05-29 21:00:00*/, 1432929600 /*2015-05-29 22:00:00*/)
);
foreach ($events as $thisevent) {
    $conflicts = 0;
    foreach ($events as $thatevent) {
        if ($thisevent[0] === $thatevent[0]) {
            continue;
        }
        $thisevent_from = $thisevent[1];
        $thisevent_ends = $thisevent[2];
        $thatevent_from = $thatevent[1];
        $thatevent_ends = $thatevent[2];
        if ($thatevent_ends > $thisevent_from AND $thisevent_ends > $thatevent_from) {
            $conflicts++;
            echo "Event #" . $thisevent[0] . " overlaps with Event # " . $thatevent[0] . "\n";
        }
    }
    if ($conflicts === 0) {
        echo "Event #" . $thisevent[0] . " is OK\n";
    }
}
  • 0
    Но как я могу использовать эту функцию с переменными моего массива событий, если существует более трех массивов событий? Спасибо.
  • 0
    Я разместил достаточное количество кода. Импровизировать.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню