2016-12-29 102 views
0

我有(只有一年)日期範圍的數組作爲這樣的一個數組:查找重疊日期

$dates = array(array('sy'=>2015, 'ey'=>2017), 
       array('sy'=>2010, 'ey'=>2012), 
       array('sy'=>2011, 'ey'=>2016)  
); 

我如何才能找到導致一個起始年,一個共同的日期範圍從規定的日期結束的一年?如果存在多個日期範圍,我正在查找最新的日期範圍。

我在尋找這個輸出與普通今年開始和結束一年數組作爲這樣的:

$dateRangeResult = array('sy'=>$commonStartYear, 'ey'=>$commonEndYear); 
+1

節目應該如何看預期的結果 – RomanPerekhrest

+0

我編輯的問題,以顯示結果 – jpc

+1

問題的所需的格式仍然是不明確IMO。如果我的範圍是2013-2019和2011-2018,預期產量是多少? – mpen

回答

0

好吧,我想我可能有這個想通了。

從本質上講,我採用了每年的時間跨度,並將年份從頭到尾填滿,將它們添加到數組中,並刪除任何獨特的值。這需要考慮重疊年份並確定年份範圍內可能存在的差距。

$years = array(); 
foreach($dates as $yearSet){           
    for($i = $yearSet['sy']; $i<= $yearSet['ey']; $i++){ 
     array_push($years, $i); 
    } 
} 
$years = array_unique($years); 

然後,我創建了一個範圍,從第一次約會的最後日期搞清楚在哪裏(如果有),差距在一年範圍。

$firstYr = min($years); 
$lastYr = max($years); 
$compare = range($firstYr, $lastYr, 1); 
$missYrs = array_diff($compare, $years); 

如果在一年範圍內的差距,$ missYr將包含這些年的數組。如果不是,則$ firstYr和$ lastYr代表整個範圍,並且可以按原樣返回。如果有差距或缺口,我想獲得最後一個,並檢索最新的年份範圍。

if ($missYrs){ 
    $lastBreak = max($missYrs); 
    //in order to find the start year of the highest year range, add a year to the highest break date. Naturally, the end date would then be the $lastYear. 
    $k = array_search(($lastBreak + 1), $years); 
    $dateRangeResult['sy'] = $years[$k]; 
    $dateRangeResult['ey'] = $lastYr; 

}else{ 
    $dateRangeResult['sy'] = $firstYr; 
    $dateRangeResult['ey'] = $lastYr; 
}