Объединяйте дни, где часы работы аналогичны

Как я могу закодировать функцию в PHP (с помощью CodeIgniter), чтобы объединить дни с аналогичным временем работы магазина вместе. Например, если мы имеем:

Mon 9am-5pm
Tue 9am-5pm
Wed 9am-5pm
Thu 9am-5pm
Fri 9am-5pm
Sat 9am-7pm
Sun 9am-7pm

Я хочу, чтобы код упрощал его:

Mon-Fri 9am-5pm
Sat-Sun 9am-7pm

Как мне это сделать без длинного списка if/else или case ifs? Я использую CodeIgniter..

Ответ 1

<?php
$openHours = array(
    'Mon' => '9am-5pm',
    'Tue' => '9am-5pm',
    'Wed' => '9am-9pm',
    'Thu' => '9am-5pm',
    'Fri' => '9am-5pm',
    'Sat' => '9am-7pm',
    'Sun' => '9am-7pm'
);

$summaries = array();
foreach ($openHours as $day => $hours) {
    if (count($summaries) === 0) {
        $current = false;
    } else {
        $current = &$summaries[count($summaries) - 1];
    }
    if ($current === false || $current['hours'] !== $hours) {
        $summaries[] = array('hours' => $hours, 'days' => array($day));
    } else {
        $current['days'][] = $day;
    }
}

foreach ($summaries as $summary) {
    if (count($summary['days']) === 1) {
        echo reset($summary['days']) . ' ' . $summary['hours'] . PHP_EOL;
    } else {
        echo reset($summary['days']) . '-' . end($summary['days']) . ' ' . $summary['hours'] . PHP_EOL;
    }
}

пример кода

Ответ 2

Пожалуйста, помогите мне нужно решение для аналогичного типа:

Пн '10 утра-1 вечера /5 вечера-10 вечера' '

Вт 10:00 - 13:00

Ср. "10:00 - 13:00/17:00 - 22:00"

Чт '' 10 утра-1 вечера /5 вечера-10 вечера ''

Пт '10 утра-1 вечера /5 вечера-10 вечера' '

Сб 10.00 - 13.00

Вс 10:00 - 13:00

want the code to simplify it to:

Mon-Fri 10am-1pm
        5pm-10pm

Tue 10am-1pm

Sat-Sun 10am-1pm

Пожалуйста, помогите, спасибо