2016-06-12 108 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