我正在努力向现有日历解决方案添加日视图选项。像许多实现自己的日历的人一样,我正在尝试对 Google 日历进行建模。他们有一个出色的日历解决方案,并且他们的日视图提供了很大的灵活性。大多数情况下,实施进展顺利;然而,当涉及到冲突事件时,我遇到了问题。
本质上,我希望这些活动并排共享同一个空间。同时开始的事件应将最长的事件排在最前面。在我正在使用的示例数据集中,有四个事件:
答:10:30 - 11:30
乙: 13:30 - 14:30
下午:10:30 - 11:00
晚:10:45 - 14:00
我可以很好地处理A、C和D,问题出在D上。A应该在C的左边,而C应该在D的左边;每个占宽度的三分之一(它是固定宽度,所以我可以做简单的数学来计算出来)。问题是 B 应该位于 A 和 C 的下方,D 的左侧。理想情况下,B 会占用与 A 和 C 相同的空间(三分之二宽度),但我什至会满足于它只占用三分之一宽度。
我的事件数组类似于以下内容:
$events = array(
'1030' => array(
'uniqueID1' => array(
'start_time' => '1030',
'end_time' => '1130',
),
'uniqueID2' => array(
'start_time' => '1030',
'end_time' => '1100',
),
),
'1045' => array(
'uniqueID3' => array(
'start_time' => '1045',
'end_time' => '1400',
),
),
'1330' => array(
'uniqueID3' => array(
'start_time' => '1330',
'end_time' => '1430',
),
),
);
我的计划是为每个事件添加一些索引,包括它与多少个事件冲突(这样我可以计算宽度)以及它应该在该系列中的哪个位置(这样我可以计算左值)。然而,这对B没有帮助。
我想我可能需要一种使用一些基本几何和矩阵的算法,但我不知道从哪里开始。
任何帮助是极大的赞赏。