Можете ли вы помочь мне с перекрывающимися периодами. У меня есть массив
["1-9","11-15","14-20","8-11"]
У каждого элемента в массиве свой период. Мин — 1 период, макс — 10 периодов в массиве. Мне нужно определить, перекрываются ли они.
Я нахожу это случаи из другого вопроса
Это простой фрагмент, способ проверки которого основан на сравнении самого высокого конца первого диапазона с самым низким концом второго диапазона (если мы только считаем, что диапазоны действительны). И в первую очередь, сортировка диапазонов играет важную роль:
$ranges = ["1-9","11-15","14-20","8-11"];
$results = [];
sort($ranges, SORT_NUMERIC);
foreach ($ranges as $first) {
$firstNums = explode("-", $first);
foreach ($ranges as $second) {
if ($first == $second) continue;
$secondNums = explode("-", $second);
if ($firstNums[1] >= $secondNums[0] && $first != end($ranges)) {
$results[$first] = $second;
}
}
}
print_r($results);
Результаты (которые содержат обе перекрывающиеся даты):
Array
(
[1-9] => 8-11
[8-11] => 11-15
[11-15] => 14-20
)
Других решений пока нет …