为了账号安全,请及时绑定邮箱和手机立即绑定

PHP - 正确分组数据并获取数据之间的数据

PHP - 正确分组数据并获取数据之间的数据

PHP
慕田峪4524236 2022-01-14 16:48:45
我有一张桌子要预订:id         room_id        start          end1          1              2019-10-04     2019-10-142          1              2019-10-13     2019-10-223          1              2019-12-16     2019-12-254          1              2019-11-30     2019-12-18房间表:id         name        type1          002         1-A2          005         3-B所以我只想要一个房间类型的样本,1-A我想将预订分组foreach到这个输出:start_date => 2019-10-04      AND    end_date => 2019-10-22start_date => 2019-11-30      AND    end_date => 2019-12-25应该有2组。我试过用这个$new = array();foreach($bookingArr as $booking) {   $new[$booking->room_id][$booking->start][] = $booking;}但我没有得到我想要的输出。
查看完整描述

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

首先,您需要按开始日期排序结果。在您需要实现日期起止期间的交集之后。


假设它已经完成,代码可能与此类似:


<?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']);

}



查看完整回答
反对 回复 2022-01-14
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信