Как проверить несколько последовательностей в 1 массиве PHP

Я искал решение для своей проблемы, но не мог найти, поэтому я подумал, что спрошу. В настоящее время у меня есть массив, содержащий количество дней, когда компания открыта, с этих дней у меня есть числовые значения.

Итак, если компания открыта 7 дней в неделю, у меня будет:

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

Если компания закрыта в четверг, массив изменится на:

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

Теперь моя конечная цель - получить первый и последний день всех последовательных дней. Итак, 0-6 в первом примере.

А для второго примера (поскольку компания закрыта только в четверг) я хотел бы показать: пятница-среда, чтобы было 4-2.

У кого-нибудь есть идеи по этому поводу? Потому что я довольно застрял.


person TheLD    schedule 16.07.2017    source источник
comment
Ваше желание переносить даты (в отличие от «понедельник-среда, пятница-воскресенье») усложняет задачу. Что вы хотите, чтобы что-то вроде array(0, 2, 4, 6) вернуло?   -  person Niet the Dark Absol    schedule 16.07.2017
comment
Просто дни разделяют значения 0, 2, 4, 6   -  person TheLD    schedule 16.07.2017
comment
Так что в таком случае он должен дать Monday, Wednesday, Friday, Sunday? Или Wednesday, Friday, Sunday-Monday? Или что?   -  person Niet the Dark Absol    schedule 16.07.2017
comment
Что является входом для этой функции?   -  person Andreas    schedule 16.07.2017
comment
Что делать, если компания закрыта на 2 дня? Вторник и четверг? Что будет на выходе?   -  person Milan Chheda    schedule 16.07.2017


Ответы (1)


Вы можете использовать приведенный ниже код, и он работает в один закрытый день или даже в несколько закрытых дней.

$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;
person Tanseer UL Hassan    schedule 16.07.2017