個人的なプロジェクトを行って、php だけでカレンダーを作成しています。交差する日付に基づいて配列をグループ化し、グリッド上に描画できるようにする方法がわかりません。このように見えるもの
http://calendar.oregonstate.edu/docs/img/day_view_advanced.gif (まだ画像を投稿できません)
元の配列
array
0 =>
array (size=7)
'ID' => string '6188' (length=4)
'name' => string 'test' (length=32)
'dt_start' => string '2012-10-04 10:00:00' (length=19)
'dt_end' => string '2012-10-04 11:00:00' (length=19)
重複する日付を持ついくつかのイベントがあると仮定します。これは、日付が交差して機能するかどうかを確認するために使用する関数です。
function Intersect ($date, $cDate, $start, $end) {
return ($date == $start) || ($date > $start ? $date <= $end : $start < $cDate);
}
実際の描画に問題はありませんが、配列をグループ化してグリッドに適切に配置しようとしています。
//$e is the events
foreach ($e as $k => $a) {
$oStart1 = new DateTime( $a ['dt_start'] );
$oEnd1 = new DateTime( $a ['dt_end'] );
foreach ($e as $i => $b) {
if ( $a['ID'] == $b['ID'] )
continue;
$oStart2 = new DateTime( $b ['dt_start'] );
$oEnd2 = new DateTime( $b ['dt_end'] );
if ( Intersect ($oStart1, $oEnd1, $oStart2, $oEnd2) ) {
$intersect[$a['ID']] = $a;
}
}
}
これにより、互いに交差するすべての日付がグループ化されます。幅を正しく設定できるように $intersect 配列を異なるグループに分割する方法がわからないので、これは私を夢中にさせています。最適には、結果の配列を次のようにしたいと思います
$group[ 1 ] = array (
array (
'start_time' => '2012-10-04 10:00:00',
'end_time' => '2012-10-04 12:00:00'
),
array (
'start_time' => '2012-10-04 10:30:00',
'end_time' => '2012-10-04 11:40:00'
),
array (
'start_time' => '2012-10-04 11:00:00',
'end_time' => '2012-10-04 12:00:00'
)
);
$group[ 2 ] = array (
array (
'start_time' => '2012-10-04 13:00:00',
'end_time' => '2012-10-04 14:00:00'
),
array (
'start_time' => '2012-10-04 13:30:00',
'end_time' => '2012-10-04 13:40:00'
)
);
これを行うライブラリがあることは知っています。つまり、jquery フル カレンダー プラグインはかなり優れていますが、プログラミングについてもっと学ぼうとしています。正しい方向に向けるためのヘルプやリンクは素晴らしいでしょう。