[英]PHP - Proper grouping of data and getting the in between data
我有一張桌子可以預訂:
id room_id start end
1 1 2019-10-04 2019-10-14
2 1 2019-10-13 2019-10-22
3 1 2019-12-16 2019-12-25
4 1 2019-11-30 2019-12-18
房間表:
id name type
1 002 1-A
2 005 3-B
所以我只想要一個1-A
房間類型的樣本,我想使用foreach
將預訂分組到此輸出:
start_date => 2019-10-04 AND end_date => 2019-10-22
start_date => 2019-11-30 AND end_date => 2019-12-25
應該有2組。
我嘗試使用這個
$new = array();
foreach($bookingArr as $booking) {
$new[$booking->room_id][$booking->start][] = $booking;
}
但是我沒有得到想要的輸出。
首先,您需要按開始日期排序結果。 在您需要實現日期開始-結束期間的交集之后。
假設完成,代碼可能與此代碼類似:
<?php
$bookingData = [
[
'room_type' => '1-A',
'start' => '2019-10-04',
'end' => '2019-10-14',
],
[
'room_type' => '1-A',
'start' => '2019-10-13',
'end' => '2019-10-22',
],
[
'room_type' => '1-A',
'start' => '2019-11-30',
'end' => '2019-12-18',
],
[
'room_type' => '1-A',
'start' => '2019-12-16',
'end' => '2019-12-25',
],
];
$output = [];
$k = -1;
foreach ($bookingData as $data) {
$curr = $output[$k] ?? null;
if ($curr !== null &&
$data['start'] >= $curr['start'] &&
$data['start'] <= $curr['end'] &&
$data['end'] > $curr['end']) {
$output[$k]['end'] = $data['end'];
} else {
$output[] = $data;
$k++;
}
}
foreach ($output as $item) {
echo sprintf("start_date => %s AND end_date => %s\r\n", $item['start'], $item['end']);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.