2016-06-12 107 views
0

我有一个名为$ time的变量数组。而我想要做的是计算在用户停留在某些部门,例如秒数dept的无8.PHP中的多维数组

$time = array(
    '91' => array(
     '100' => array(
      '0' =>array(
       'id' =>'15', 
       'time' => '2014/05/28 00:23:26', 
       'dept' => '8' 
      ), 
      '1' =>array(
       'id' =>'15', 
       'time' => '2014/05/28 00:25:51', 
       'dept' => '8' 
      ), 
      '2' =>array(
       'id' =>'15', 
       'time' => '2014/05/28 00:27:45', 
       'dept' => '9' 
      ), 
     '3' =>array(
      'id' =>'15', 
      'time' => '2014/05/28 00:28:01', 
      'dept' => '8' 
     ) 
     '4' =>array(
      'id' =>'15', 
      'time' => '2014/05/28 00:30:46', 
      'dept' => '4' 
     ) 
    ) 
); 

我有如下表:enter image description here

23:26至25 :51有一个145秒的差异。

25:51至27:45具有114秒的差异。

28:01至30:46具有165秒的差异。

所以,如果我们添加它们145+ 114 + 166。用户在该部门停留的总秒数为424秒。

而在第9部分: 27:45至28:01有16秒的差异。

我想达到的输出:

$results = array(
      '8' => '424', 
      '9' => '16' 
); 

它快把我逼疯了。有人可以帮助我如何实现它,或者实现它的最佳方式是什么。我试过了:

$timeFirst = strtotime('2016/05/26 00:27:45'); 
$timeSecond = strtotime('2016/05/26 00:28:01'); 
$differenceInSeconds = $timeSecond - $timeFirst; 
print_r($differenceInSeconds); 

但问题是我不能继续,因为我不知道如何继续它。谢谢。

+0

你应该看一下[Carbon](http://carbon.nesbot.com/docs/#api-difference)。碳在我的生命中拯救了许多分钟。在你的情况下,你可以使用$ date1-> diffInSeconds($ date2)来获得上述结果。 –

回答

0

的事情是,你的阵列深度嵌套,所以你需要几个foreach圈才能到的详细信息:

foreach($time as $arr) { 
    foreach($arr as $visits) { 
     foreach($visits as $i => $visit) { 
      if ($i == count($visits)-1) break; 
      $results[$visit['dept']] += 
       strtotime($visits[$i+1]['time']) - strtotime($visit['time']); 
     } 
    } 
} 

$results是:

Array 
(
    [8] => 424 
    [9] => 16 
) 

看到它运行在eval.in

+0

谢谢。我会查一下。如果确实有效。我会接受你的回答。 – useruseruser

+0

当我更改密钥[0,1,2,3,4]时,秒计算不起作用。为什么会发生这种情况https://eval.in/590986 – useruseruser

+0

(1)那是你在那里的不同代码。您添加了一个嵌套的循环,它覆盖了与前一个元素相同的元素。我不明白你为什么那样做。 (2)我提供的代码是基于一个索引数组(如你的问题),而不是一个关联数组,这是你设置按键时得到的不同。如果你想这样,我建议你问一个新问题。 – trincot

0

这应该做的伎俩

function arr2timespent($arr){ 
    $ret=array(); 
    for($i=0;$i<count($arr)-1;$i++){ 
    $startTime=strtotime($arr[$i]["time"]); 
    $endTime=strtotime($arr[$i+1]["time"]); 
    $diff=$endTime-$startTime; 
    $ret[$arr[$i]["dept"]]+=$diff; 
    } 
    return $ret; 
} 

它遍历所有条目的数组中(除了最后一个)。然后它将时间差异添加到数组项中。
这个功能应该被称为arr2timespent($time["91"]["100"]);

+0

感谢您的快速回答。让我试试看。 – useruseruser