簡體   English   中英

PHP-正確分組數據並獲取數據之間的間隔

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM