大量的PHP / MySQL插入重叠时间

I'm working on this software for a gym that has overlapping times for schedules, if the time is greater than 35 minutes between the end time of a class and the start time of the class, that time is dropped.

Example: I work from 8:00am to 9:00am, 8:30am to 9:30am, 10:10am to 11:10am. Anything over a 35min gap is considered a different shift.

I have this working on pay reports at this point only per employee.

The problem is that they would like to mass check-in everyone on holidays and my brain is going a bit crazy trying to figure out how to do arrays and loops on individual employee IDs, figuring out the overlap, dropping the >35min and inserting that shift into the check_ins table.

I've isolated the workers for the given holiday at this point and have the shifts they're scheduled for, I have a total number of employee IDs in an array and a total number of schedules in an array.

anyone have an idea how this might be most easily implemented without me drinking myself stupid? (If a gym ever asks you to write scheduling software, RUN!)

Thanks!

Edit: The holiday pay conditions are as variable as the friggin wind, so no help there.

My code for a single employee:

    //init our arrays
    $timeStart = array();
    $timeEnd = array();
    $x = 0;
    $maxInterval = new DateTime('00:35');
    $classIDArray = array();

    do {
//Get our start times for Monday
$p = new DateTime($row_GetMonSchedule2['Start_time']);
$q = new DateTime($row_GetMonSchedule2['End_time']);
$timeStart[$x] = $p->format('H:i');
$timeEnd[$x] =  $q->format('H:i');
//Get Class IDs
$classIDArray[$x] = $row_GetMonSchedule2['Class_ID'];

$totalEndTimes = count($timeEnd);
$x++;

} while ($row_GetMonSchedule2 = mysql_fetch_assoc($GetMonSchedule2));

//echo $totalRows_GetMonSchedule2;

//Now let's check the durations and make our shifts

//echo "Class ID Array: "; print_r($classIDArray);

$x = 0;
$s = 1;

do {
///First Time Start 
if ($x == 0) {
$TimeDayStart = $timeStart[$x];
}

if ($x < $totalEndTimes) {
///Last Time End
$TimeDayEnd = $timeEnd[$x]; 
}


  $x++; $s++;
} while ($x < $totalEndTimes);

$x = 0;
$s = 1;

/////Get Durations

$interval = array();


do {
 if ($x == 0) {
  //The very first end time
  //First end time of the first time block
  $firstEndTime = new DateTime($timeEnd[$x]); 
  $startTime = new DateTime($timeStart[$s]);
  $timeDiff = $startTime->diff($firstEndTime);
  $interval[$x] = $timeDiff->format('%H:%i');
 } else {
  //We don't need the last record because there isn't anything to calculate it aginst, so increase $x by one
  if ($x + 1 > $totalEndTimes) {



  } else {
    $endTime = new DateTime($timeEnd[$x]);
    $startTime = new DateTime($timeStart[$s]);
    $timeDiff = $endTime->diff($startTime);
    $interval[$x] = $timeDiff->format('%H:%i');

  }

 }



  $x++; $s++;

} while ($x < $totalEndTimes);

//Let's try to break this up into shifts now...
$x =0;
$y =0;
$zz = 1;
$s = 1;
$timeBreak =0;
$durCount = count($interval) - 1;
$BreakStartTimes = array();
$BreakEndTimes = array();
$xx3 = 0;
$yy3 = 0;

//Setup table
do {


  if ($x == 0) {
//echo $timeStart[$x]." - ";
$BreakStartTimes[$yy3] = $timeStart[$x];
$yy3++;
  if (new DateTime($interval[$x]) > new DateTime('00:35')) {
  //echo $timeEnd[$x]." ";
  $BreakEndTimes[$xx3] = $timeEnd[$x];
  $xx3++;
  $timeBreak = 1;
  //echo "Time Break";
  }

  } 
  if (new DateTime($interval[$x]) > new DateTime('00:35') && $timeBreak != 1) {
  //echo $timeEnd[$x]." ";
  $BreakEndTimes[$xx3] = $timeEnd[$x];
  $xx3++;
  $timeBreak = 1;
  //echo "Time Break";
  }

  if ($timeBreak == 1 && $x + 1 < $totalEndTimes) {
  //echo $timeStart[$s]." - ";
    $BreakStartTimes[$yy3] = $timeStart[$s];
    $yy3++;
  $timeBreak = 0;
  }


  $x++; $s++;

} while ($x < $totalEndTimes);

if (empty($BreakEndTimes)) {
  //echo "empty";
  $ttt = count($timeEnd) - 1;
  //echo $ttt;
}

Like some commenters have said before me, nesting some loops should do the trick. Try writing it down in pseudo code and fill in the details from there.

Example:

//connect to database
$conn = new mysqli("host","user","pass","db");

// check for connection error
if ($mysqli->connect_error) 
{
    die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}

//query for all employees working the holiday
// I might be way off with the query seeing as I don't know the complexity
$sql = "SELECT e.ID, count(s.Start_Time) FROM employee e, schedule s 
        WHERE count(s.Start_Time) >= 1 AND e.ID = s.Employee_ID
            AND s.Start_Time >= '2013-12-24 00:00:00.0000' 
            AND s.End_Time <= '2014-01-02 00:00:00.0000'
        GROUP BY e.ID;";

//get the result from database like you do already

//then do the loop
for each employee 
{
    execute the code you have for the current employee
}
do clean up or other tasks after the loop is done

Now this is pretty easy to start expanding and hopefully give an idea you can build on.