2015-10-20 155 views
1

我有不同的健身房會議之間休息,需要在一天的陣列中呈現。php雖然循環過早終止

$sStart = '08:00'; 
$startMin = 480 //start time in minutes 
$br1MS = 560 //first break in minutes 
$br2MS = 780 //second break in minutes 
$sEnd = '16:00'; 
$interval = 40; 

現在我的第一次突破是兩會後即'09:20' 至'09:40' 和第二和最後一次會議開始'13:00' 到'14:00' 。

我使用的同時firstBreak之前填充陣列是這樣的:

while ($startMin < $br1MS) { 
     if(isset($t['end']) && ($t['end'] == date('H:i',(strtotime(floor($startMin/60).":".$startMin%60))))){ 
      $t['start'] = $t['end']; 
      $nStart = $startMin+$interval; 
      $t['end'] = date('H:i',(strtotime(floor($nStart/60).':'.$nStart%60))); 
      $timeArray[] = $t; 
      $s['bStart'] = $t['end']; //start time 
      $s['bEnd'] = date('H:i',(strtotime(floor($br1ME/60).':'.$br1ME%60))); 
      $timeArray[] = $s; 
      $startMin = $br1ME; 
     }else{ 
      $t['start'] = date('H:i',(strtotime(floor($startMin/60).':'.$startMin%60))); 
      $startMin += $interval; 
      $t['end'] = date('H:i',(strtotime(floor($startMin/60).':'.$startMin%60))); 
      $timeArray[] = $t; 
     } 
    } 

結果是:

array(
(int) 0 => array(
    'start' => '08:00', 
    'end' => '08:40' 
), 
(int) 1 => array(
    'start' => '08:40', 
    'end' => '09:20' 
), 
(int) 2 => array(
    'bStart' => '09:20', 
    'bEnd' => '09:40' 
)) 

然後我填充會話陣列中,直至與另一個while循環第二斷裂僅僅複製第一個上面是這樣的:

while ($startMin < $br2MS) { 
     debug($br2MS); 
     if(isset($t['end']) && ($t['end'] == date('H:i',(strtotime(floor($startMin/60).":".$startMin%60))))){ 
      $t['start'] = $t['end']; 
      $nStart = $startMin+$interval; 
      $t['end'] = date('H:i',(strtotime(floor($nStart/60).':'.$nStart%60))); 
      $timeArray[] = $t; 
      $s['bStart'] = $t['end']; //start time 
      $s['bEnd'] = date('H:i',(strtotime(floor($br2ME/60).':'.$br2ME%60))); 
      $timeArray[] = $s; 
      $startMin = $br2ME; 
     }else{ 
      $t['start'] = date('H:i',(strtotime(floor($startMin/60).':'.$startMin%60))); 
      $startMin += $interval; 
      $t['end'] = date('H:i',(strtotime(floor($startMin/60).':'.$startMin%60))); 
      $timeArray[] = $t; 
     } 
    } 

並且結果是:

array(
(int) 0 => array(
    'start' => '08:00', 
    'end' => '08:40' 
), 
(int) 1 => array(
    'start' => '08:40', 
    'end' => '09:20' 
), 
(int) 2 => array(
    'bStart' => '09:20', 
    'bEnd' => '09:40' 
), 
(int) 3 => array(
    'start' => '09:40', 
    'end' => '10:20' 
), 
(int) 4 => array(
    'start' => '10:20', 
    'end' => '11:00' 
), 
(int) 5 => array(
    'bStart' => '11:00', 
    'bEnd' => '14:00' 
) 

問題:

只有兩次迭代之後的第二循環終止無填充所有第二批會話。 這是我所期待的:

array(
(int) 0 => array(
    'start' => '08:00', 
    'end' => '08:40' 
), 
(int) 1 => array(
    'start' => '08:40', 
    'end' => '09:20' 
), 
(int) 2 => array(
    'bStart' => '09:20', 
    'bEnd' => '09:40' 
), 
(int) 3 => array(
    'start' => '09:40', 
    'end' => '10:20' 
), 
(int) 4 => array(
    'start' => '10:20', 
    'end' => '11:00' 
), 
(int) 5 => array(
    'start' => '11:00', 
    'end' => '11:40' 
), 
(int) 6 => array(
    'start' => '11:40', 
    'end' => '12:20' 
), 
(int) 7 => array(
    'start' => '12:20', 
    'end' => '13:00' 
), 
(int) 8 => array(
    'bStart' => '13:00', 
    'bEnd' => '14:00' 
) 

我看不到我在哪裏wrong..any指針讚賞

回答

0

以下是我固定的代碼。
有修改意見,請參考。
我希望這是你的預期結果;-)

<?php 
date_default_timezone_set('Asia/Tokyo'); 
$sStart = '08:00'; 
$startMin = 480; //start time in minutes 
$br1MS = 560; //first break in minutes 
$br1ME = 580; /** Added */ 
$br2MS = 780; //second break in minutes 
$br2ME = 840; /** Added */ 
$sEnd = '16:00'; 
$interval = 40; 

/** Not modified */ 
while ($startMin < $br1MS) { 
    if(isset($t['end']) && ($t['end'] == date('H:i',(strtotime(floor($startMin/60).":".$startMin%60))))){ 
     $t['start'] = $t['end']; 
     $nStart = $startMin+$interval; 
     $t['end'] = date('H:i',(strtotime(floor($nStart/60).':'.$nStart%60))); 
     $timeArray[] = $t; 
     $s['bStart'] = $t['end']; //start time 
     $s['bEnd'] = date('H:i',(strtotime(floor($br1MS/60).':'.$br1ME%60))); 
     $timeArray[] = $s; 
     $startMin = $br1ME; 
    }else{ 
     $t['start'] = date('H:i',(strtotime(floor($startMin/60).':'.$startMin%60))); 
     $startMin += $interval; 
     $t['end'] = date('H:i',(strtotime(floor($startMin/60).':'.$startMin%60))); 
     $timeArray[] = $t; 
    } 
} 


while ($startMin < $br2ME) {/** $br2MS -> $br2ME */ 
    // debug($br2MS); 
    /** 
    * process for second break. 
    */ 
    if ($startMin === $br2MS) { 
     $t['start'] = $t['end']; 
     $nStart = $startMin + ($br2ME - $br2MS); 
     $s['bStart'] = $t['end']; //start time 
     $s['bEnd'] = date('H:i',(strtotime(floor($br2ME/60).':'.$br2ME%60))); 

     $timeArray[] = $s; 
     $startMin = $br2ME; 
     continue; 
    } 

    if(isset($t['end']) && ($t['end'] == date('H:i',(strtotime(floor($startMin/60).":".$startMin%60))))){ 
     $t['start'] = $t['end']; 

     $nStart = $startMin+$interval; 
     $t['end'] = date('H:i',(strtotime(floor($nStart/60).':'.$nStart%60))); 
     $timeArray[] = $t; 

     /** 
     * For the sake of clarity, the codes for second break are moved. 
     */ 
     // $s['bStart'] = $t['end']; //start time 
     // $s['bEnd'] = date('H:i',(strtotime(floor($br2MS/60).':'.$br2ME%60))); 
     // $timeArray[] = $s; 
     // $startMin = $br2MS; 

     $startMin = $nStart; 
    }else{ 
     $t['start'] = date('H:i',(strtotime(floor($startMin/60).':'.$startMin%60))); 
     $startMin += $interval; 
     $t['end'] = date('H:i',(strtotime(floor($startMin/60).':'.$startMin%60))); 
     $timeArray[] = $t; 
    } 
} 

var_dump($timeArray);