Дни группы на основе совпадающих часов

1

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

Mon  : 9:00AM - 7:00PM
Tue  : 9:00AM - 10:00PM
Wed  : 9:00AM - 7:00PM
Thu  : 9:00AM - 10:00PM
Fri  : 9:00AM - 7:00PM
Sat  : 9:00AM - 10:00PM
Sun  : 9:00AM - 7:00PM

Я хочу, чтобы код выводился как:

Mon,Wed,Fri,Sun - 9:00AM - 7:00PM
Tue,Thu,Sat - 9:00AM - 10:00PM

Ниже приведен код, который я пытаюсь выработать.

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

$summary = array();
foreach ($openHours as $day => $hours) {
    if (!array_key_exists($hours, $summary))
        $summary[$hours] = array($day);
    else
        $summary[$hours][] = $day;
}

foreach ($summary as $hours => $days) {
    echo array_shift($days) . '-' . array_pop($days) . ' ' . $hours . PHP_EOL;
}
  • 0
    Я нашел похожую статью, но она не выводит правильный вывод. ссылка
  • 0
    Пожалуйста, смотрите как спросить и идеальный вопрос
Показать ещё 3 комментария
Теги:
arrays
grouping

2 ответа

0
Лучший ответ

Это должно сработать для вас:

Сначала мы меняем структуру массива и используем время как ключ и дни как значения с этим кодом:

foreach($openHours as $k => $v)
    $array[$v][] = $k;

Таким образом, мы получаем массивную структуру:

Array
(
    [9am-7pm] => Array
        (
            [0] => Mon
            [1] => Wed
            [2] => Fri
            [3] => Sun
        )

    [9am-10pm] => Array
        (
            [0] => Tue
            [1] => Thu
            [2] => Sat
        )

)

После этого нам просто нужно пропустить новый массив и implode() дней в строку, разделенную запятой, и добавить время после нее.

Код:

<?php

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


    foreach($openHours as $k => $v)
        $array[$v][] = $k;

    foreach($array as $time => $days)
        echo implode(",", $days) . " " . $time . PHP_EOL;

?>

вывод:

Mon,Wed,Fri,Sun 9am-7pm
Tue,Thu,Sat 9am-10pm
  • 0
    Это сработало. Спасибо @ Rizier123
  • 0
    @Maqk Не за что. Удачного дня :)
-2

$ closetime = ['7:00' => ['Mon', 'Wed', 'Fri', 'Sun'], '10: 00 '=> [' Tue ',' Thu ',' Sat ']];

foreach ($ closetime as $ time => $ days) {echo explode (',', $ days). "- 9:00 -". $ time; } }

или что-то типа того

  • 0
    Вы должны попытаться понять вопрос.
  • 0
    @AliZia, когда я ответил на вопрос, там были только первые 2 абзаца вопроса. Я ответил на вопрос так, как он был задан изначально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню