Есть массив времени:
$arTimes[0]["START"] = 1515486600 //09.01.2018 11:30
$arTimes[0]["END"] = 1515488400 //09.01.2018 12:00
$arTimes[1]["START"] = 1515488400 //09.01.2018 12:00
$arTimes[1]["END"] = 1515488400 //09.01.2018 12:30
$arTimes[2]["START"] = 1515486600 //09.01.2018 11:30
$arTimes[2]["END"] = 1515490200 //09.01.2018 12:30
В данном контексте $arTimes[0]
не пересекается с $arTimes[1]
но пересекается с $arTimes[2]
, и $arTimes[1]
пересекается с $arTimes[2]
.
Необходимо узнать все пересечения рекурсивно, то есть если $arTimes[0]
пересекся с $arTimes[2]
, то далее нужно узнать с кем пересекается $arTimes[2]
и т.д.
Цель, если есть пересечения у элемента $arTimes[0]
то установить $arTimes[0]["NEW_START"]
= наименьший START и $arTimes[0]["NEW_END"]
наибольший END из всех элементов которые пересеклись друг с другом.
Так же, прикрепить эти элементы к $arTimes[0]["ELEM"][] = $arTimes[2]
и т.д., затем удалить их из массива $arTimes
, что бы более не сравнивать интервалы.
Как же это реализовать?
Во-первых ошибка в исходных данных: $arTimes[1]["END"] = 1515488400 //09.01.2018 12:30
это не 12:30
Должно быть так:
$arTimes[0]["START"] = 1515486600; //09.01.2018 11:30
$arTimes[0]["END"] = 1515488400 ; //09.01.2018 12:00
$arTimes[1]["START"] = 1515488400; //09.01.2018 12:00
$arTimes[1]["END"] = 1515490200; //09.01.2018 12:30
$arTimes[2]["START"] = 1515486600; //09.01.2018 11:30
$arTimes[2]["END"] = 1515490200; //09.01.2018 12:30
Потом в рекурсии сравниваем интервалы времени:
function chain($index) {
global $arTimes, $freezeIndex;
$time = $arTimes[$index];
if(!isset($time)) {
return;
}
foreach($arTimes AS $indexTime => $value) {
if(!in_array($indexTime, $freezeIndex) && $indexTime != $index && max($value["START"], $time["START"]) < min($value["END"], $time["END"])) {
$freezeIndex[] = $indexTime;
if($time["START"] > $value["START"]) {
$arTimes[0]["NEW_START"] = $value["START"];
}
if($time["END"] < $value["END"]) {
$arTimes[0]["NEW_END"] = $value["END"];
}
echo "Пересекаются " . $index . " и " . $indexTime . "\n";
chain($indexTime);
}
}
}
Ну и посмотреть: https://ideone.com/W8DESm
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ЗдравствуйтеВ форме есть поле <input type="file" name="filename" /> При отправке формы идёт проверка
Пытаюсь разобраться с websocket'ами на phpЕсть веб хостинг (сайт), нужно подключиться к нему по сокетам
Перестал работать сайт на modxНе переходит ни в админку ни сам сайт не работает