这应该适合你:
所以基本上你只需遍历整个数组并检查下一个元素是否仍然设置并且当前数组与下一个相同(这意味着它们具有相同的小时数)。如果是,则执行此操作,直到 while 循环返回 false。这段代码是什么:
$DayAmountOfConsecutiveSameHours = 1;
while(isset($arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours)]) &&
($opening_hours[$arrayKeys[$dayCount]] === $opening_hours[$arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours)]]))
$DayAmountOfConsecutiveSameHours++;
然后,如果您有超过 1 个条目,您可以创建一个从一天到另一天的范围。这段代码是什么:
if($DayAmountOfConsecutiveSameHours > 1)
$result[$arrayKeys[$dayCount] . " - " . $arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours-1)]] = $opening_hours[$arrayKeys[$dayCount]];
如果您只有 1 天的时间相同,您只需将其添加到结果数组中即可。这段代码是什么:
else
$result[$arrayKeys[$dayCount]] = $opening_hours[$arrayKeys[$dayCount]];
根据相同小时数的天数,您跳过下一个数组元素。这段代码是什么:
$dayCount += ($DayAmountOfConsecutiveSameHours - 1);
完整代码:
<?php
$opening_hours = [
"Monday" => ["09:00", "17:00"],
"Tuesday" => ["09:00", "17:00"],
"Wednesday" => ["08:00", "13:00"],
"Thursday" => ["09:00", "17:00"],
"Friday" => ["09:00", "17:00"],
"Saturday" => ["10:00", "16:00"],
"Sunday" => ["Closed"],
];
$amountOfDays = count($opening_hours);
$arrayKeys = array_keys($opening_hours);
for($dayCount = 0; $dayCount < $amountOfDays; $dayCount++) {
$DayAmountOfConsecutiveSameHours = 1;
while(isset($arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours)]) && ($opening_hours[$arrayKeys[$dayCount]] === $opening_hours[$arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours)]]))
$DayAmountOfConsecutiveSameHours++;
if($DayAmountOfConsecutiveSameHours > 1)
$result[$arrayKeys[$dayCount] . " - " . $arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours-1)]] = $opening_hours[$arrayKeys[$dayCount]];
else
$result[$arrayKeys[$dayCount]] = $opening_hours[$arrayKeys[$dayCount]];
$dayCount += ($DayAmountOfConsecutiveSameHours - 1);
}
print_r($result);
?>
输出:
Array
(
[Monday - Tuesday] => Array
(
[0] => 09:00
[1] => 17:00
)
[Wednesday] => Array
(
[0] => 08:00
[1] => 13:00
)
[Thursday - Friday] => Array
(
[0] => 09:00
[1] => 17:00
)
[Saturday] => Array
(
[0] => 10:00
[1] => 16:00
)
[Sunday] => Array
(
[0] => Closed
)
)
Demo