2016-06-13 2 views
-1

겹치는 기간을 알려주십시오. 나는 배열을 가지고있다겹치는 기간 발견 PHP

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

배열의 각 요소의 기간. 최소 1주기, 최대 10주기의 배열 겹치는 부분을 찾아야합니다.

나는 또 다른 질문에서이 사례를 찾을 수

image

+1

https://stackoverflow.com/questions/325933/determine 그리고 첫 번째 장소에서, 정렬 범위는 중요한 역할을하고있다 -whether-two-date-ranges-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