计算php

时间:2016-06-19 11:18:25

标签: php arrays

这让我发疯了。而我想要做的是计算用户在某个部门停留的秒数,例如8号部门。

我有这个数组:

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

解释是:

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

到目前为止,我所做的代码是:https://eval.in/591599 我得到了一些错误的结果。请帮帮我。

1 个答案:

答案 0 :(得分:1)

您可以使用this answer的变体,它适用于关联数组,就像您在这里一样:

foreach($time as $arr) {
    foreach($arr as $visits) {
        $visits = array_values($visits); // convert to indexed array
        foreach($visits as $i => $visit) {
            if ($i == count($visits)-1) break;
            $dept = $visit['dept'];
            $results[$dept] = (isset($results[$dept]) ? $results[$dept] : 0) +
                strtotime($visits[$i+1]['time']) - strtotime($visit['time']);
        }
    }
}

$results是:

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

eval.in

上查看它