1 回答
TA贡献1828条经验 获得超3个赞
我接近它的方式是:
在 1 天内创建一系列可用插槽。
在请求的日期范围内创建一个新的可用时段数组,创建一个包含字段date、start、end、isbooked的新数组。
现在我有一个数组,其中包含整个请求日期范围的槽时间和日期,我面临的最后一个问题是如何在 foreach 循环中完成它并更改原始值?我偶然发现了 StackOverflow 上的另一个答案,它为我回答了这个问题,因此,我能够在最终数组上执行最终的 foreach 循环,并遍历每个数据库结果以检查它是否与 foreach 显示的时间段上的日期匹配然后将isbooked标志设置为 true。
最后!我有一组工作代码可以创建我需要的 JSON 返回值。没有重复,只有免费插槽和预订插槽很好地坐在一起。
我的最终代码如下:
for ( $i = 0; $i <= $daysInRange; $i++ ) {
//for the current date we need to go through each slot.
foreach ( $freeSlots as $slot ) {
$slotStart = new DateTime( $slot[ 'start' ] );
$slotEnd = new DateTime( $slot[ 'end' ] );
$aSlot[ 'date' ] = $cDate->format( "Y-m-d" );
$aSlot[ 'start' ] = $slotStart->format( "H:i:s" );
$aSlot[ 'end' ] = $slotEnd->format( "H:i:s" );
$aSlot[ 'isbooked' ] = false;
$allSlots[] = $aSlot;
}
//Now add 1 day to the cDate and then check if its greater than the eDate
$cDate->modify( '+1 Day' );
if ( $cDate > $eDate ) {
break;
}
}
//var_export($allSlots);
#check new array against database and mark booked slots
foreach($allSlots as &$slot){
foreach($bookingResult as $booking) {
if($booking['bookingdate'] == $slot['date'] && $booking['bookingstarttime'] == $slot['start'] && $booking['bookingendtime'] == $slot['end']){
$slot['isbooked'] = true;
}
}
}
//Now booked slots are marked we can now create the JSON.
foreach ( $allSlots as $slot ) {
$slotStart = new DateTime( $slot[ 'start' ] );
$slotEnd = new DateTime( $slot[ 'end' ] );
$slotDate = new DateTime( $slot[ 'date' ] );
if ( $slot[ 'isbooked' ] == false ) {
$bookingsAsJSON[ 'title' ] = 'Unbooked Timeslot';
$bookingsAsJSON[ 'start' ] = $slotDate->format("Y-m-d"). ' ' . $slotStart->format( "H:i:s" );
$bookingsAsJSON[ 'end' ] = $slotDate->format( "Y-m-d" ) . ' ' . $slotEnd->format( "H:i:s" );
$bookingsAsJSON[ 'extendedProps' ][ 'bookingActualDate' ] = $slotDate->format( "Y-m-d" );
$bookingsAsJSON[ 'extendedProps' ][ 'bookingActualStartTime' ] = $slotStart->format( "H:i:s" );
$bookingsAsJSON[ 'extendedProps' ][ 'bookingActualEndTime' ] = $slotEnd->format( "H:i:s" );
$calendarEvents[] = $bookingsAsJSON;
}
}
日历上的输出如下所示:
- 1 回答
- 0 关注
- 102 浏览
添加回答
举报