Php foreach循环在时隙间隔内,如果间隔是空闲的,则只返回四分之一时间
我有一个mySQL表“timeslots”,其中包含“interval”和“reserved”列。我如何循环遍历它并仅返回15分钟的间隔,但“剪切”15分钟的间隔必须保留=0。例如,我应该循环一列“interval”并返回08:15:00,但跳过08:00:00,因为08:08:00 interval是保留的(列保留=1),我还应该跳过interval 08:45:00,因为08:53:00是保留=1。我已经附上了这个问题的表格图像 几天来,我一直在努力寻找解决办法,但没有成功Php foreach循环在时隙间隔内,如果间隔是空闲的,则只返回四分之一时间,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有一个mySQL表“timeslots”,其中包含“interval”和“reserved”列。我如何循环遍历它并仅返回15分钟的间隔,但“剪切”15分钟的间隔必须保留=0。例如,我应该循环一列“interval”并返回08:15:00,但跳过08:00:00,因为08:08:00 interval是保留的(列保留=1),我还应该跳过interval 08:45:00,因为08:53:00是保留=1。我已经附上了这个问题的表格图像 几天来,我一直在努力寻找解决办法,但没有成功 您首先需要获得
您首先需要获得保留的插槽。然后在循环中检查插槽是否有下一个保留插槽
public function getTimeSlots($app)
{
$reservedSlots = Timeslot::where('app', '=', $app)->where('reserved', '=', 1)->orderBy('intervals', 'ASC')->get();
$timeslots = Timeslot::where('app', '=', $app)->where('reserved', '=', 0)->orderBy('intervals', 'ASC')->get();
$timeslotlist = array();
foreach ($timeslots as $timeSlot) {
$haveNextReservedSlot = array_filter($reservedSlots, function($v) use($timeSlot){
$start_date = new DateTime($timeSlot['date'].' '.$timeSlot['intervals']);
$since_start = $start_date->diff(new DateTime($v['date'].' '.$v['intervals']));
return $since_start->i < 15; //if difference less than 15 min
});
if($haveNextReservedSlot) continue;
$timeslotlist[] = array(
'id' => $timeSlot['id'],
'app' => $timeSlot['app'],
'intervals' => $timeSlot['intervals'],
'reserved' => $timeSlot['reserved'],
);
}
return json_encode($timeslotlist);
}
公共函数getTimeSlots($app)
{
$reservedSlots=Timeslot::where('app','=','app)->where('reserved','=',1)->orderBy('interval','ASC')->get();
$timeslots=timeslots::where('app','=','app)->where('reserved','=',0)->orderBy('interval','ASC')->get();
$timeslotlist=array();
foreach($timeSlot作为$timeSlot){
$haveNextReservedSlot=array_filter($reservedslot,function($v)use($timeSlot){
$start_date=new DateTime($timeSlot['date'..'...$timeSlot['interval']);
$since_start=$start_date->diff(新日期时间($v['date'..'..$v['interval']);
返回$since_start->i<15;//如果差异小于15分钟
});
如果($haveNextReservedSlot)继续;
$timeslotlist[]=数组(
'id'=>$timeSlot['id'],
'app'=>$timeSlot['app'],
“间隔”=>$timeSlot[“间隔”],
“保留”=>$timeSlot[“保留”],
);
}
返回json_encode($timeslotlist);
}
我想将集合转换为数组,这样比较上一个时隙和下一个时隙会更容易,例如
public function getTimeSlots($app)
{
$timeslots = Timeslot::where('app', '=', $app)->orderBy('intervals', 'ASC')->get()->toArray();
$timeslotlist = array();
for($i=0;$i<count($timeslots);$i++){
$current_slot=strtotime($timeslots[$i]->date." ".$timeslots[$i]->intervals);
if(date('i',$current_slot) % 15===0){
if((isset($timeslots[$i-1]) && $timeslots[$i-1]->reserved) or
(isset($timeslots[$i+1]) && $timeslots[$i+1]->reserved)){
}
else{
$timeslotlist[]=$timeslots[$i];
}
}
}
return json_encode($timeslotlist);
}
公共函数getTimeSlots($app)
{
$timeslots=Timeslot::where('app','=','app)->orderBy('interval','ASC')->get()->toArray();
$timeslotlist=array();
对于($i=0;$idate.““$timeslots[$i]->间隔);
如果(日期('i',$current_slot)%15==0){
如果((isset($timeslots[$i-1])&&$timeslots[$i-1]->保留)或
(isset($timeslots[$i+1])&&&$timeslots[$i+1]->保留){
}
否则{
$timeslotlist[]=$timeslots[$i];
}
}
}
返回json_encode($timeslotlist);
}
这将在08:30返回。这就是您想要的吗?请回答您的问题,并包含您尝试过但未按预期工作的代码。
public function getTimeSlots($app)
{
$timeslots = Timeslot::where('app', '=', $app)->orderBy('intervals', 'ASC')->get()->toArray();
$timeslotlist = array();
for($i=0;$i<count($timeslots);$i++){
$current_slot=strtotime($timeslots[$i]->date." ".$timeslots[$i]->intervals);
if(date('i',$current_slot) % 15===0){
if((isset($timeslots[$i-1]) && $timeslots[$i-1]->reserved) or
(isset($timeslots[$i+1]) && $timeslots[$i+1]->reserved)){
}
else{
$timeslotlist[]=$timeslots[$i];
}
}
}
return json_encode($timeslotlist);
}