我正在尝试创建一个非常基本的日预订系统,需要返回一个范围内的所有日期,然后从该范围中删除选定的日期。我尝试了以下代码,但意识到这会删除重复项,这很好,但我也需要删除该日期。
谁能提出一个好的方法来做到这一点?
在下面的示例中,我只是希望看到:
2022-04-03T00:00:00.000000Z
2022-04-04T00:00:00.000000Z
2022-04-05T00:00:00.000000Z
$start_date = "2022-04-01"; $end_date = "2022-04-05"; $datesToRemove = [ '2022-04-01T00:00:00.000000Z', '2022-04-02T00:00:00.000000Z' ]; $range = Carbon::parse($start_date)->toPeriod($end_date)->toArray(); $available = array_unique(array_merge($range, $datesToRemove)); return $available;
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
要进行比较,比较值必须具有相同的格式。我决定将 $datesToRemove 转换为 Carbon 格式。您可以使用嵌套循环并使用 PHP
in_array()函数进行检查。$start_date = "2022-04-01"; $end_date = "2022-04-05"; $datesToRemove = [ "2022-04-01T00:00:00.000000Z", "2022-04-02T00:00:00.000000Z" ]; $range = \Carbon\Carbon::parse($start_date)->toPeriod($end_date)->toArray(); $datesToRemove2 = []; foreach($datesToRemove as $r) { $datesToRemove2[] = \Carbon\Carbon::parse($r); } $res = []; foreach($datesToRemove2 as $index => $d1) { if(in_array($d1, $range)) { unset($range[$index]); } } return $range;输出
{ "2":"2022-04-03T00:00:00.000000Z", "3":"2022-04-04T00:00:00.000000Z", "4":"2022-04-05T00:00:00.000000Z" }意味着