2016-06-12 21 views
0

私は$ timeという名前の変数配列を持っています。 25にenter image description herePHPの多次元配列

夜11時26:そして、私がやりたいことは、私は次の表を持って何8.

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

をDEPTないユーザは、例えば、特定の部門に滞在した秒数を数えることです:51の秒差は145です。

25:51から27:45には114秒の差があります。

28:01から30:46の秒の差は165です。

したがって、145+ 114 + 166を追加してください。ユーザーがその部門に滞在した総秒数は424秒です。

dept 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($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; 
} 

トリックを行う必要があります。それは時間差をとり、の第配列エントリにそれを加えます。あなたは、いくつかのforeachループが詳細に取得する必要があるので、
この関数は、事はあなたの配列が深くネストされているということであるarr2timespent($time["91"]["100"]);

+0

クイックアンサーに感謝します。私はそれを試してみましょう。 – useruseruser