2013-06-13 3 views
0

У меня возникают проблемы с циклом через массив и сравнение каждого значения со следующим. В настоящее время моя функция работает, но она только сравнивает значения в наборах из двух. Например, если в значении «Start» Я имел:Разница между значениями в массиве php

1:05 утра 1:10 утра 1:30 утра 1:35 утра

Я хотел бы получить результаты: 5 минут (время между 1 : 05 и 1:10) и 5 минут (время между 1:30 и 1:35)

Но у меня отсутствует время между 1:10 и 1:30. Следующий цикл даст мне время между двумя следующими значениями, игнорируя время между 1:35 и следующим. Функция предназначена для silverstripe, которая использует datalists, но шаблон должен быть таким же, как любой массив? Был бы признателен за любую проницательность.

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); 
    } 
} 

ответ

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); 
    } 
} 
+0

Как бы установить значение lastTime как значение времени, проведенного одной итерацией назад? –

+1

использовать '$ lastTime = $ time;' в том месте, где '$ lastTime = null;' равно –

+0

. Пока что получается правильное количество значений, он возвращает очень нечетные результаты. Выход затем становится 15-минутным | 22852195 мин. | 22852200 мин. | что и привело к тому, что сначала я использовал null. –

Смежные вопросы