2016-06-13 4 views
-1

Вы можете помочь мне с перекрывающимися периодами. У меня есть массивОбнаружение периодов перекрытия php

["1-9","11-15","14-20","8-11"] 

Каждый элемент в массиве его период. Мин - 1 период, макс - 10 периодов в массиве. Мне нужно определить, перекрываются ли они.

Я считаю, это случаи из другого вопроса

image

+1

https://stackoverflow.com/questions/325933/determine -whether-two-date-range-overlap – techouse

+0

- это ваш вопрос, как понять, что элемент перекрывается? – splash58

+0

@ Vladislav Вы хотите проверить, что перекрытие есть, или найти совпадающие элементы? – splash58

ответ

0

Это простой фрагмент кода, что способ ее проверки основан на сравнении высокий конец первого диапазона до самого низкого конца второго диапазона (если мы будем рассматривать только эти диапазоны действительны). И в первую очередь, сортировочные диапазоны играет важную роль:

$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 
) 
+0

Я использовал '> =' оператор сравнения, который вы можете изменить только на '' '. – revo

Смежные вопросы