我遇到了循环遍历数组并将每个值与下一个值进行比较的问题。目前我的功能有效,但它只比较两组中的值。例如,如果在“开始”值中我有:
上午01点05分 上午01时10分 上午1:30 上午01点35
我会得到以下结果: 5分钟(1:05到1:10之间的时间)和 5分钟(1:30到1:35之间的时间)
但是我错过了1:10到1:30之间的时间。下一个循环会给我下两个值之间的时间,忽略1:35到下一个之间的时间。该函数适用于使用数据列表的silverstripe,但模式应该与任何数组相同?非常感谢任何见解。
function timeCount()
{
$times = $this->Meetings()->sort('Start');
$lastTime = null;
foreach ($times as $time) {
if ($lastTime == null) {
$lastTime = $time;
continue;
}
$time = strtotime($time->Start);
$lastTime = strtotime($lastTime->Start);
//For debugging
$diff = round(abs($time - $lastTime) / 60, 2) . " minute | ";
$lastTime = null;
var_dump($diff);
}
}
答案 0 :(得分:1)
当你这样做时
$lastTime = null;
这将导致循环的下一次迭代认为它是第一次,因此你跳过每一次比较。
function timeCount()
{
$times = $this->Meetings()->sort('Start');
$lastTime = null;
foreach ($times as $time) {
if ($lastTime == null) {
$lastTime = $time;
continue;
}
$timeVal = strtotime($time->Start);
$lastTimeVal = strtotime($lastTime->Start);
//For debugging
$diff = round(abs($timeVal - $lastTimeVal) / 60, 2) . " minute | ";
$lastTime = $time;
var_dump($diff);
}
}