1 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
我接近它的方式是:
在 1 天內(nèi)創(chuàng)建一系列可用插槽。
在請(qǐng)求的日期范圍內(nèi)創(chuàng)建一個(gè)新的可用時(shí)段數(shù)組,創(chuàng)建一個(gè)包含字段date、start、end、isbooked的新數(shù)組。
現(xiàn)在我有一個(gè)數(shù)組,其中包含整個(gè)請(qǐng)求日期范圍的槽時(shí)間和日期,我面臨的最后一個(gè)問(wèn)題是如何在 foreach 循環(huán)中完成它并更改原始值?我偶然發(fā)現(xiàn)了 StackOverflow 上的另一個(gè)答案,它為我回答了這個(gè)問(wèn)題,因此,我能夠在最終數(shù)組上執(zhí)行最終的 foreach 循環(huán),并遍歷每個(gè)數(shù)據(jù)庫(kù)結(jié)果以檢查它是否與 foreach 顯示的時(shí)間段上的日期匹配然后將isbooked標(biāo)志設(shè)置為 true。
最后!我有一組工作代碼可以創(chuàng)建我需要的 JSON 返回值。沒(méi)有重復(fù),只有免費(fèi)插槽和預(yù)訂插槽很好地坐在一起。
我的最終代碼如下:
? ? 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 關(guān)注
- 135 瀏覽
添加回答
舉報(bào)