Как я могу скомпоновать функцию в 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;
}
Это должно сработать для вас:
Сначала мы меняем структуру массива и используем время как ключ и дни как значения с этим кодом:
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
$ closetime = ['7:00' => ['Mon', 'Wed', 'Fri', 'Sun'], '10: 00 '=> [' Tue ',' Thu ',' Sat ']];
foreach ($ closetime as $ time => $ days) {echo explode (',', $ days). "- 9:00 -". $ time; } }
или что-то типа того