问题背景:
最近,有一个需求,需要对数据做做检测,个人觉得还是很有必要记录一下,虽然离上次写博客,已过去大半年了,但依然需要坚持~
问题描述:
1、一天中,分为各个时间阶段,例如:8-9,10-12,15-17,这样的时间范围的数据
2、需要这一天的数据中添加一个时间段,不能与已有的数据冲突,交叉,简单的讲就是互斥
3、修改数据,针对某一个时间数据进行修改,同样进行检测,不能与其他已有的数据冲突,交叉
解决问题思路(找不合理的数据):
1、先判断需要插入的数据开始时间t1在任意时间范围内,肯定这个数据不能插入;
2、再增加判断插入数据结束时间t2在任意时间范围内,肯定这个数据也不能插入;
3、1和2得出的结论是,数据不在各个时间节点内,但是会出现另一个问题,插入时间可能会包含了已有数据,如:7-10,10-18,与上面的数据不冲突,但是存在交叉,插入新增数据包含了原有数据;
4、需要解决步骤3的问题,再增加判断,当判断任意一个数据都在插入时间的范围内,则这个数据依然不能插入;
经上述四个判断,就能解决该问题,有一种数据互斥的味道,但还不是很明白~(以后慢慢研究)
5、问题3的修改数据,增加一个数据id来判断识别,在检测过程去掉需要修改的数据
代码实现(php):
1 $begin_dt = 7; 2 3 $end_dt = 12; 4 5 for($i = 0; !empty($data) && $i < count($data); $i++){ 6 7 if(($begin_dt >= $data[$i]['begin_dt'] && $begin_dt < $data[$i]['end_dt']) || 8 9 ($end_dt > $data[$i]['begin_dt'] && $end_dt <=$data[$i]['end_dt']) || 10 11 ($data[$i]['begin_dt'] > $begin_dt && data[$i]['end_dt'] <$end_dt)){ 12 13 return false; 14 } 15 16 }