2013-10-07 3 views
3

У меня есть этот массивSum время, если дата уже существует или имеет дубликат

$date = array{"2013-09-17 00:21:00", 
       "2013-09-23 00:12:00", 
       "2013-09-23 00:41:00", 
       "2013-09-20 00:13:00", 
       "2013-09-19 00:34:00", 
       "2013-09-17 00:38:00"} 

Я пытаюсь суммировать время внутри массива, которые имеют ту же дату.

Это мой ожидаемый результат:

$date = array{"2013-09-17 00:59:00", 
       "2013-09-23 00:53:00", 
       "2013-09-20 00:13:00", 
       "2013-09-19 00:34:00"} 

Теперь это то, что я пытался до сих пор

foreach($date as $key => $value) 
     { 
      $lf_date[] = date("Y-m-d",strtotime($value)); 
      $lf_time[] = date("H:i:s",strtotime($value)); 

      if(isset($lf_date[$key])) 
      { 
       $output[] += $lf_time[$key]; 
      } 
      else 
      { 
       $output[] = $lf_time[$key]; 
      } 

     } 

Это дает мне 0 выход T_T .. Я уже пробовал поиск на Google, и это говорит, что я должен использовать isset и array_key_exists, но я не могу заставить его работать. . :(Спасибо за тех, кто мог бы помочь мне

+0

Не тайный раза в даты, но до нескольких секунд – Voitcus

+1

Простого вопроса, что делать вам ожидать от '' 2013-01-01 23:00:00 "+" 2013-01-01 23:00:00 "? Ваша модель данных неверна. Вы добавляете даты и временные промежутки. –

+0

Я думаю, вы хотите получить только отличное значение? –

ответ

1

Использование:.

<?php 
$date = array("2013-09-17 00:21:00", 
       "2013-09-23 00:12:00", 
       "2013-09-23 00:41:00", 
       "2013-09-20 00:13:00", 
       "2013-09-19 00:34:00", 
       "2013-09-17 00:38:00"); 

$array = array();    
foreach($date as $key => $value) 
{ 
    $lf_date = date("Y-m-d",strtotime($value)); 
    $lf_time = date("H:i:s",strtotime($value)); 

    $midnight = strtotime("0:00"); 

    if(!isset($array[$lf_date])) 
      $array[$lf_date] = 0;//check is array index exists 

    $array[$lf_date] += strtotime($lf_time) - $midnight; 
} 

foreach($array as $key => $value) 
{ 
    $midnight = strtotime("0:00"); 
    $array[$key] = $key." ".date("G:i:s", $midnight + $value); 
} 

$result = array_values($array); 

print_r($result); 

?> 

Выход:.

Array 
(
    [0] => 2013-09-17 0:59:00 
    [1] => 2013-09-23 0:53:00 
    [2] => 2013-09-20 0:13:00 
    [3] => 2013-09-19 0:34:00 
) 
+0

Я получаю сообщение об ошибке в этой строке '$ array [$ lf_date]' он говорит Нелегированный тип смещения :( – bot

+0

Ответ обновлен, чтобы исправить индекс/смещение массива с помощью 'if (! Isset ($ array [$ lf_date])) $ array [$ lf_date] = 0; ' – Salim

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