2017-08-30 23 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

相關問題