2017-08-30 73 views
1

我有个教学班,他们的时间开始和结束日期返回打破了班级开始和结束日期之间

类示例数据

"id": "1", 
"name": "class 1", 
"start": "2017-08-09 02:00:00", 
"end": "2017-08-09 03:00:00", 

"id": "2", 
"name": "class 2", 
"start": "2017-08-09 04:00:00", 
"end": "2017-08-09 05:00:00", 

"id": "3", 
"name": "class 3", 
"start": "2017-08-09 06:30:00", 
"end": "2017-08-09 08:00:00", 

我想回到所有的休息时间> =电流时间,在班级之间,例如休息时间被认为是从第1班结束日期到第2班开始日期之间的时间

预期产出

"break": "1", 
"start": "2017-08-09 03:00:00", 
"end": "2017-08-09 04:00:00", 

"break": "2", 
"start": "2017-08-09 05:00:00", 
"end": "2017-08-09 06:30:00", 

这就是我试图

$now = date('Y-m-d H:i:s'); 
$sql = "SELECT * FROM classes WHERE classes.start >= '$now'"; 

try { 
    $db = new db(); 
    $db = $db->connect(); 
    $stmt = $db->prepare($sql); 

    $stmt->execute(); 

    $breaks = $stmt->fetchAll(PDO::FETCH_OBJ); 

    $db = null; 

    if(empty($breaks)) { 
     $response->getBody()->write 
     (' 
     { 
      "error": 
      { 
       "message":"Invalid" 
      } 
     }'); 
    } else { 
     $response->getBody()->write(json_encode($breaks)); 
    } 
} catch(PDOException $e) {} 

回答

1

请试试这个:

function getBreaks($classes = array()) { 
    $breaks = array(); 
    for ($i = 0; $i <= count($classes); $i++) { 
     if ($i < count($classes)-1) { 
      if (strtotime($classes[$i+1]->start) > strtotime($classes[$i]->end)) { 
       $break = array(); 
       $break["break"] = count($breaks)+1; 
       $break["start"] = $classes[$i]->end; 
       $break["end"] = $classes[$i+1]->start; 
       array_push($breaks, $break); 
      } 
     } 
    } 
    return array("breaks"=>$breaks); 
} 


$now = date('Y-m-d H:i:s'); 
$sql = "SELECT * FROM classes WHERE classes.start >= '$now' ORDER BY classes.start"; 

try { 
    $db = new db(); 
    $db = $db->connect(); 
    $stmt = $db->prepare($sql); 

    $stmt->execute(); 

    $breaks = $stmt->fetchAll(PDO::FETCH_OBJ); 

    $db = null; 

    if(empty($breaks)) { 
     $response->getBody()->write 
     (' 
     { 
      "error": 
      { 
       "message":"Invalid" 
      } 
     }'); 
    } else { 
     $arr = array(); 
     foreach($breaks as $break) { 
      array_push($arr, $break); 
     } 
     var_dump($arr); 
     $response->getBody()->write(json_encode(getBreaks($arr))); 
    } 
} catch(PDOException $e) {} 
+0

我应该在哪里把这个查询后?在尝试{..}我也一直得到不能使用stdclass作为数组在这一行'if(strtotime($ classes [$ i + 1] ['start'])> strtotime($ classes [$ i] ['end' ])){' – mirvatJ

+0

这是一个独立的函数,你可以调用else的最后一行。 –

+0

好吧分开放置它仍然得到不能使用stdClass类型的对象作为数组,我不能做一个foreach在try {..}打印出我想要的形式的数组? – mirvatJ

相关问题