2017-07-16 35 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; 
相关问题