php虽然循环过早终止
问题描述:
我有不同的健身房会议之间休息,需要在一天的阵列中呈现。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指针赞赏
答
以下是我固定的代码。
有修改意见,请参考。
我希望这是你的预期结果;-)
<?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);