講師が利用可能かどうかを示すスケジューリング用のコードを作成する必要があります。PHPで2つの多次元配列を相違させる
availability: [
'2016-12-01': [
0: ['start': '08:00:00', 'end': '09:30:00'],
1: ['start': '09:30:00', 'end': '11:00:00'],
2: ['start': '11:00:00', 'end': '12:30:00'],
3: ['start': '12:30:00', 'end': '14:00:00'],
4: ['start': '14:00:00', 'end': '15:30:00'],
5: ['start': '15:30:00', 'end': '17:00:00'],
6: ['start': '17:00:00', 'end': '18:30:00'],
7: ['start': '18:30:00', 'end': '20:00:00']
]
]
をしかし、今、私たちはインストラクターがあるときに、データベースから取得する必要があります:
$begin = new \DateTime('first day of this month');
$end = new \DateTime('last day of this month');
$dailyInterval = new \DateInterval('P1D');
$dailyPeriod = new \DatePeriod($begin, $dailyInterval, $end);
$data = [];
/** @var \DateTime $date */
foreach($dailyPeriod as $date)
{
$currentDate = $date->format('Y-m-d');
$start = new \DateTime("$currentDate 08:00");
$finish = new \DateTime("$currentDate 20:00");
$appointmentInterval = new \DateInterval($appointmentVariant->getInterval());
$appointmentPeriod = new \DatePeriod($start, $appointmentInterval, $finish);
/** @var \DateTime $duration */
foreach($appointmentPeriod as $duration)
{
$endDate = clone $duration;
$data['availability'][$currentDate][] = [
'start' => $duration->format('H:i:s'),
'end' => $endDate->modify('+90 minutes')->format('H:i:s')
];
}
}
これの出力は次のとおりです。
は、だから私は、次の(月)の期間を行いました(複数のソース、予定、休暇、定期的なイベントなどから来る可能性があります)、最終的には上記のような配列がありますが、使用できません:
unavailability: [
'2016-12-01': [
0: ['start': '14:30:00', 'end': '16:30:00'],
1: ['start': '18:00:00', 'end': '18:20:00'],
]
]
今は疑問です。インストラクターが利用可能になったときにそれらの2つの配列をどのようにして最終的なものにするのですか?利用可能な日付と時刻、そして利用できない日付と時刻をループするのはかなり難しいです。
diffは(DELを削除する=)私に次のような結果をお返しする必要があります
availability: [
'2016-12-01': [
0: ['start': '08:00:00', 'end': '09:30:00'],
1: ['start': '09:30:00', 'end': '11:00:00'],
2: ['start': '11:00:00', 'end': '12:30:00'],
3: ['start': '12:30:00', 'end': '14:00:00'],
DEL 4: ['start': '14:00:00', 'end': '15:30:00'],
DEL 5: ['start': '15:30:00', 'end': '17:00:00'],
DEL 6: ['start': '17:00:00', 'end': '18:30:00'],
7: ['start': '18:30:00', 'end': '20:00:00']
]
]
誰もがそれを行うための最も効率的な方法を知っていますか?
幸運