<?php
$existingRanges = [
['start_date' => '2023-11-22', 'end_date' => '2023-11-30', 'price' => 200],
['start_date' => '2023-12-10', 'end_date' => '2023-12-14', 'price' => 100],
['start_date' => '2023-12-15', 'end_date' => '2023-12-20', 'price' => 100],
['start_date' => '2023-12-21', 'end_date' => '2023-12-27', 'price' => 100],
['start_date' => '2024-01-05', 'end_date' => '2024-01-05', 'price' => 600],
['start_date' => '2024-01-06', 'end_date' => '2024-01-07', 'price' => 700],
['start_date' => '2024-01-08', 'end_date' => '2024-01-20', 'price' => 700],
['start_date' => '2024-01-21', 'end_date' => '2024-01-31', 'price' => 100],
];
function mergeDateRanges($p_arrDateranges) {
$finalArray = [];
$arrLastDR = null;
foreach ($p_arrDateranges as $arrDR) {
if ($arrLastDR === null) {
$arrLastDR = $arrDR;
continue;
}
$endDate = DateTime::createFromFormat('Y-m-d', $arrLastDR['end_date']);
$sLastDateE_1 = $endDate->modify('+1 day')->format('Y-m-d');
if (strtotime($arrDR['start_date']) == strtotime($sLastDateE_1) && $arrDR['price'] == $arrLastDR['price']) {
$arrLastDR['end_date'] = $arrDR['end_date'];
}else{
array_push($finalArray, $arrLastDR);
$arrLastDR = $arrDR;
}
}
if($arrLastDR !== null){
array_push($finalArray, $arrLastDR);
}
return $finalArray;
}
print_r(mergeDateRanges($existingRanges));
- Output for 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.7
- Array
(
[0] => Array
(
[start_date] => 2023-11-22
[end_date] => 2023-11-30
[price] => 200
)
[1] => Array
(
[start_date] => 2023-12-10
[end_date] => 2023-12-27
[price] => 100
)
[2] => Array
(
[start_date] => 2024-01-05
[end_date] => 2024-01-05
[price] => 600
)
[3] => Array
(
[start_date] => 2024-01-06
[end_date] => 2024-01-20
[price] => 700
)
[4] => Array
(
[start_date] => 2024-01-21
[end_date] => 2024-01-31
[price] => 100
)
)
preferences:
94.38 ms | 403 KiB | 62 Q