需求:轮播图管理,24小时内有多张轮播图,每张轮播图可以播放一个时间段,单位为小时hour。为避免冲突,在设置轮播图的播放时间段时,要校验所设置时间段是否有其他轮播图占用。表字段:id,start_hour,end_hour,img_url.难点就是涉及到时间段的加减
//校验时间是否被占用
public function checkTime($aTime){
//定义一个24个元素的数组标识24小时,每个元素标识当前到下一个小时的时间段
$aData = range(0,23);
//查询到当前数据库被占用的所有时间,伪代码
(array) $aCategory = DB::table('img')->get(['start_hour', 'end_hour'])->get();
foreach ($aCategory as $v){
//-1是因为时间是范围,我在这里给每个范围标识了一个key,比如key 0代表0点到1点,key12代表12-13点,然后用key做计算
$aData = array_diff($aData,range($v['start_hour'],$v['end_hour']-1));//$aData为剩余可选的时间
}
$bData = range($aTime['start_hour'],$aTime['end_hour']);//$bData为当前选的时间
//如果bData的元素出现aData中没有的数据(即当前选择时间有超出可选时间段的),返回报错
$diffData = array_diff($bData,$aData);
if(!empty($diffData)){
return false;
}
return true;
}
//检查1到2点之间的时间有没有被占用
var_dump(checkTime(['start_hour'=>1,'end_hour']=>2));
网友评论