Резюме:
У меня есть приложение с множеством флажков на странице. Пользователь выбирает любые флажки, которые они хотят, и обращается в submit.
Мне нужно сделать некоторые проверки конфликта.
Мое текущее состояние кода отлично работает. Однако я обнаружил недостаток в логике, которая кажется, что позволяет некоторым «выборам» пройти, не будучи отмеченными как конфликт. (но я не понимаю, почему они проскальзывают мимо, и как это исправить)
Технический обзор:
Я беру массив представленных элементов управления / элементов и прокручиваю каждый из них, делая следующее:
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: ПРОВЕРКА: hours_9_7_reg_session_102_945_1005 [конец: 09/07/2015 10:05]> hours_9_7_reg_session_101_945_1005 [начало: 09/07/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: ПРОВЕРКА: hours_9_7_reg_session_102_925_945 [конец: 09/07/2015 9:45]> hours_9_7_reg_session_101_945_1005 [начало: 09/07/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.'; } }
Как можно проскальзывать код / временные параметры в вышеприведенном блоке? Где, как другие, недопустимо?
Я не уверен, что мне нужно подтянуть какие-то условности или что-то еще?
Ну, решение (ошибка) было проще, чем я ожидал.
В основном где-то я проверяю отметки даты и времени. Мне нужно убедиться, что я выполняю литье / преобразование их в значение strtotme () … поскольку вытягивание значения из объекта / массива рассматривается как строка.
Почему в любой другой момент проверка конфликта работала без проблем .. Я не знаю. лол
Но при этом исправлялись мои проблемы:
if(strtotime($cf_presX['fullStart']) < strtotime($cf_presY['fullStart'])){ if (strtotime($cc_presX['fullEnd']) > strtotime($cc_presY['fullStart'])) {