这应该适用于您:
基本上,您只需循环遍历整个数组并检查下一个元素是否仍然已设置且当前数组与下一个数组相同(这意味着它们具有相同的小时数)。如果是,则执行此操作,直到while循环返回false。代码如下:
$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]];
如果你只有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
)
)
演示