我有一组时间戳和持续时间以及一组占用时间戳。 我现在需要检查这些时间戳是否发生冲突。
基本上$ start []不能在任何$ occupied []时间戳
中doc = view.GetDocumentByKey(['John', 'Doe'])
上述$start[0] = 1486987200; // 12:00
$duration[0] = 3600;
$start[1] = 1487008800; // 18:00
$duration[1] = 7200;
$occupied[0] = 1486989000; // 12:30
$ocDuration[0] = 3600;
$occupied[1] = 1487019600; // 21:00
$ocDuration[1] = 7200;
是不可能的,因为$start[0]
在1小时(3600秒)的范围内,但$occupied[0]
是可能的,因为它从18:00开始,并且结束2小时后。
另一种情况可能是$start[1]
与$occupied[0]
重叠:
所以问题是,我该怎么做这样的检查?
答案 0 :(得分:1)
如果您将$ start和$ duration用作非数组变量,则可以使用下面的这个。否则,只需编写一个双循环。
$start[0] = 1486987200; // 12:00
$duration[0] = 3600;
$start[1] = 1487008800; // 18:00
$duration[1] = 7200;
$occupied[0] = 1486989000; // 12:30
$ocDuration[0] = 3600;
$occupied[1] = 1487019600; // 21:00
$ocDuration[1] = 7200;
$occupied[2] = 1486989000; // 12:30
$ocDuration[2] = 23400;
function checkOccupancy($start, $duration, $occupied, $ocDuration){
$ocLength = count($occupied);
for($i = 0; $i <= $ocLength; $i++){
$ocEnd = $occupied[$i] + $ocDuration[$i];
$end = $start + $duration;
if(($start > $occupied[$i] && $start < $ocEnd) || ($end > $occupied[$i] && $end < $ocEnd) ){
return "Not Possible";
}
}
return "Possible";
}
echo checkOccupancy($start[0], $duration[0], $occupied, $ocDuration);
echo checkOccupancy($start[1], $duration[1], $occupied, $ocDuration);
答案 1 :(得分:0)
function checkTimeSlot($occupied, $occDuration, $checkStart, $checkDuration)
{
$isValid = true;
foreach($occupied as $key => $occStartTime)
{
$occEndTime = $occStartTime + $occDuration;
if($checkStart > $occStartTime || $checkStart < $occEnd || $occEndTime > $occStartTime || $occEndTime < $occEndTime)
{
$isValid = false;
}
}
return $isValid;
}
$isValid = [];
foreach ($start as $key => $checkStart)
{
$isValid[$key] = checkTimeSlot($checkStart, $duration[$key]);
}