PHP:用于查找可供选择的可用预约时间的算法

时间:2014-02-09 13:07:00

标签: php performance algorithm scheduling

练习需要与患者安排预约并将该预约分配给医生。

约会包括各种测试和开始时间。 测试包括名称和持续时间。 因此,我们可以通过将所有必需测试的持续时间相加来计算所需的持续时间。

练习可以选择日期,医生和所需的测试 - 使用ajax,我希望能够返回可用时间段的json对象供患者选择。

  1. 构建所有可用时间的数组(打开和关闭之间间隔为20分钟)。
  2. -

    $practiceOpen = strtotime($input['date'] . ' 10:00');
    $practiceClose = strtotime($input['date'] . ' 18:00');
    
    $interval  = 20 * 60; // 20 mins
    
    while ($start < ( $end - $requiredDuration * 60 ) )
    {
        $times[] = date( "Y-m-d H:i", $start);
        $start += $interval;
    }
    
    1. 获取该医生指定日期的所有约会的集合。

    2. 使用appointments[](2)和times[](1)嵌套foreach,以便从主times[]中移除所有不可用的时间。

    3. 例如

      foreach ($appointments as $appointment)
      {
          foreach($times as $key => $time)
          {
              $time = strtotime($time);
      
              if ( 
                  $time + $requiredDuration * 60 >= strtotime($appointment->appointment) 
                      &&
                  $time < strtotime($appointment->appointment) + $appointment->duration * 60
              ) { unset($times[$key]); }
          }
      }
      

      if语句基本上是

      **If** 
          start time plus the required duration of the tests is larger than the start time of the existing appointment **AND**
          start time is less than existing appointment + duration of existing appointment
      **Then** Remove that timeslot from array.
      

      问题:上面的代码片段/算法似乎有效,但是需要的是指向正确方向的指针:

      • 这是解决问题的正确/最有效的方法吗?
      • 是否有已知的算法来处理这个我可以实现哪些算法比我的实现更好或更快?
      • 有没有办法正确测试,看看我是否排除了可用的预约时间或包括不可用的时间?

0 个答案:

没有答案