2017-07-16 66 views
0

我一直在尋找解決方案來解決我的問題,但找不到,所以我想我會問。 我目前有一個數組,其中包含公司打開的天數,從這幾天我有數字值。如何檢查一個數組中的多個序列PHP

因此,如果一個公司是每週7天,我不得不:

$days= array('0','1','2','3','4','5','6'); 

如果該公司週四收盤的陣列將變爲:

$days= array('0','1','2','4','5','6');' 

現在我的最終目標是獲得所有連續日子的第一天和最後一天。 所以0-6在第一個例子中。

對於第二個例子(因爲公司只在週四休息),我想顯示:星期五 - 星期三,所以這將是4-2。

任何人有任何想法嗎?因爲我很困難。

+0

你想包裝日期(而不是做「星期一到星期三,星期五到星期日」)的願望很難。你想要'array(0,2,4,6)'返回什麼? –

+0

只是日子分開的價值0,2,4,6 6 –

+0

那麼在那種情況下,它應該給'週一,週三,週五,週日?或'週三,週五,週日 - 週一'?或者是什麼? –

回答

0

您可以使用下面的代碼,它可以在單封閉的一天甚至多封閉的日子裏工作。

$days= array('0','1','2','4','5','6'); 
$closed_days = range(1,max($days)); 
$missing = array_diff($closed_days,$days); 

$start_day = $days[0]; 
$end_day = $days[count($days) -1]; 

if(count($missing)>0){ 
    $first_key = key($missing); 
    $next_key = $first_key+count($missing) - 1; 
    if(count($missing) == 1){ 
     $next_key++; 
    } 
    $previous_key = $first_key; 

    $start_day = $days[$next_key]; 
    $end_day = $days[$previous_key]; 
} 

echo $start_day.'-'.$end_day; 
相關問題