PHP: определенные значения времени / даты не помечаются как конфликты (хотя большинство других)

Резюме:

У меня есть приложение с множеством флажков на странице.
Пользователь выбирает любые флажки, которые они хотят, и нажимает кнопку отправки.

Мне нужно сделать некоторые проверки конфликта.

Мое текущее состояние кода работает отлично … однако я обнаружил недостаток в логике, которая, кажется, позволяет определенным «выборам» проходить без учета конфликта. (но мне не понятно, ПОЧЕМУ они проскальзывают, и как это исправить)

Технический обзор:

Я беру массив представленных элементов управления / элементов и перебираю каждый из них, выполняя следующие действия:

1.) checkStartFirst () = Посмотрите, что запускается первым, и упорядочьте порядок двух «времен» в качестве аргументов, отправляемых другой функции (isConflict ()).

2.) isConflict () = принимает переданные ему аргументы .. и проверяет, больше ли время начала аргумента X, чем время окончания аргумента Y.
Затем я помещаю эти значения в другой массив для последующего использования.

3.) После завершения вышеуказанного цикла. У меня есть другая функция, которая очищает любые дуплики в массиве и передает их обратно туда, где мне нужно (для использования во внешнем интерфейсе для выделения указанных конфликтов).

выходные данные отладки для одного из сомнительных выборов, которые пропускаются и не помечаются как конфликты (где другой тот же самый выбор даты / времени ДОЛЖЕН быть помечен как конфликт)

Отправка: hours_9_7_reg_session_101_945_1005 /
hours_9_7_reg_session_102_945_1005

Получено для проверки: hours_9_7_reg_session_101_945_1005 /
hours_9_7_reg_session_102_945_1005

B: ПРОВЕРКА: часы_9_7_reg_session_102_945_1005 [конец: 09/07/2015
10:05]> hours_9_7_reg_session_101_945_1005 [начало: 07.09.2015, 9:45]

Поскольку он находится в цикле, он снова проверяется (другой способ)

Отправка: hours_9_7_reg_session_102_925_945 /
hours_9_7_reg_session_101_945_1005

Получено для проверки: hours_9_7_reg_session_102_925_945 /
hours_9_7_reg_session_101_945_1005

A: CHECKING: hours_9_7_reg_session_102_925_945 [конец: 07.09.2015, 9:45]>
hours_9_7_reg_session_101_945_1005 [начало: 07.09.2015, 9:45]

(снова проскальзывает мимо)

Мои функции PHP .. начинается с вызова setConflicts ()

//new (proposed) session conflicts checker
function checkStartFirst($cf_presX, $cf_presY) {
//$cf_presX['fullStart'] < $cf_presY['fullStart'] ? $this->isConflict($cf_presX, $cf_presY) : $this->isConflict($cf_presY, $cf_presX);

echo 'Received for checking: '. $cf_presX['id'] . '  /  ' . $cf_presY['id'] .'<br>';
if($cf_presX['fullStart'] < $cf_presY['fullStart']){
echo 'A: ';
$this->isConflict($cf_presX, $cf_presY);
}else{
echo 'B: ';
$this->isConflict($cf_presY, $cf_presX);
}
}

function isConflict ($cc_presX, $cc_presY) {
echo 'CHECKING:  ' . $cc_presX['id'] .' [end: ' . $cc_presX['fullEnd'] . ']     >     ' . $cc_presY['id'] .'  [start: ' . $cc_presY['fullStart'] . ']';
if ($cc_presX['fullEnd'] > $cc_presY['fullStart']) {
echo '  --   has conflict <br>';
array_push($this->conflict_output, $cc_presX['id']);
array_push($this->conflict_output, $cc_presY['id']);
//echo 'Found Conflict: ' . $cc_presX['id'] . '  /  ' . $cc_presY['id'] . '<br>';
}else{
//only here for debugging readability
echo '<br>';
}
}

function setConflicts() {
$presentations = $this->conflict_list;
for ($i = 0; $i < count($presentations); $i++) {
for ($j = 0; $j < count($presentations); $j++) {
// if it is not the same event
if ($presentations[$i]['id'] != $presentations[$j]['id']) {
echo '<br><br>Sending: '.($presentations[$i]['id'] .'  /  '. $presentations[$j]['id']) .'<br>';
$this->checkStartFirst($presentations[$i], $presentations[$j]);
}else{
echo '<br><br><br>same session, do not check: ' . ($presentations[$i]['id'] .'  /  '. $presentations[$j]['id']) . '<br><br><br>';
}
}
}
$this->getConflicts();
}

function getConflicts(){
$presentations = $this->conflict_output;
//remove duplicates in array & re-key (sequentially)
$uniquePresentations = array_unique($presentations);
//re-key array using sequential index #'s
$uniquePresentations = array_values($uniquePresentations);
if(count($uniquePresentations) > 0){
//save conflict (names) to array
$this->conflict_return = $uniquePresentations;
$this->errmsg = 'Please review the form for errors, there are conflicts in the highlighted sessions below. (Possible duplicate or overlapping session times have been selected.) <br>You can not proceed until all conflicts are resolved.';
}
}

Как может ускользнуть выбор кода / времени в приведенной выше цитате? Где как другие помечены?

Я не уверен, нужно ли мне ужесточить некоторые условия или что-то в этом роде?

1

Решение

Ну, решение (ошибка) оказалось проще, чем я ожидал.

По сути, везде, где я проверяю метки даты / времени … Мне нужно убедиться, что я преобразую / преобразую их в значение strtotme () … так как извлечение значения из объекта / массива рассматривается как строка.

Почему любая другая проверка конфликта времени работала без проблем .. Я не знаю. лол

Но это решило мои проблемы:

if(strtotime($cf_presX['fullStart']) < strtotime($cf_presY['fullStart'])){


if (strtotime($cc_presX['fullEnd']) > strtotime($cc_presY['fullStart'])) {
0

Другие решения

Других решений пока нет …