2014-12-06 33 views
-1

我正在構建一些電話統計數據,並且輸出下面我需要基本合併相同的src並將持續時間加在一起。例如數組索引0到6個會合併成一個數組,它看起來像下面這樣:如何根據當前/前一個數組中的值將數據合併到多維數組中

[0] => Array ([calldate] => 2014-12-01 08:31:47 [src] => 1234 [duration] => 190) 

你可能一直到8,但因爲想它不應該是指數0指數6只需10秒鐘這基本上表示該呼叫已被回答。可以假設,如果通話時間是30秒,那麼它還沒有被回答。

這不是那麼簡單,只是找到匹配的數組中的src和將所有的持續時間在一起,雖然你會在index 119123通話時看到,並在12秒內接聽,但他們回電話約30分鐘後,和他們的第二個在9:55:31打電話是在15秒內回答,這將需要是在最後陣列中分開項目。

src只是虛構的,不會是真實世界中的數字。

Array ( 

    [0] => Array ([calldate] => 2014-12-01 08:31:47 [src] => 1234 [duration] => 30) 
    [1] => Array ([calldate] => 2014-12-01 08:32:22 [src] => 1234 [duration] => 30) 
    [2] => Array ([calldate] => 2014-12-01 08:32:57 [src] => 1234 [duration] => 30) 
    [3] => Array ([calldate] => 2014-12-01 08:33:32 [src] => 1234 [duration] => 30) 
    [4] => Array ([calldate] => 2014-12-01 08:34:07 [src] => 1234 [duration] => 30) 
    [5] => Array ([calldate] => 2014-12-01 08:34:42 [src] => 1234 [duration] => 30) 
    [6] => Array ([calldate] => 2014-12-01 08:35:12 [src] => 1234 [duration] => 10) 
    [7] => Array ([calldate] => 2014-12-01 08:35:47 [src] => 1234 [duration] => 30) 
    [8] => Array ([calldate] => 2014-12-01 08:36:22 [src] => 1234 [duration] => 30) 
    [9] => Array ([calldate] => 2014-12-01 08:51:20 [src] => 5678 [duration] => 15) 
    [10] => Array ([calldate] => 2014-12-01 09:09:14 [src] => 5678 [duration] => 10) 
    [11] => Array ([calldate] => 2014-12-01 09:22:58 [src] => 9123 [duration] => 12) 
    [12] => Array ([calldate] => 2014-12-01 09:42:42 [src] => 4567 [duration] => 30) 
    [13] => Array ([calldate] => 2014-12-01 09:43:17 [src] => 4567 [duration] => 30) 
    [14] => Array ([calldate] => 2014-12-01 09:43:52 [src] => 4567 [duration] => 30) 
    [15] => Array ([calldate] => 2014-12-01 09:44:27 [src] => 4567 [duration] => 30) 
    [16] => Array ([calldate] => 2014-12-01 09:45:02 [src] => 4567 [duration] => 29) 
    [17] => Array ([calldate] => 2014-12-01 09:55:31 [src] => 9123 [duration] => 15) 
    [18] => Array ([calldate] => 2014-12-01 10:34:29 [src] => 8912 [duration] => 10) 
    [19] => Array ([calldate] => 2014-12-01 13:26:29 [src] => 3456 [duration] => 30) 
    [20] => Array ([calldate] => 2014-12-01 13:27:04 [src] => 3456 [duration] => 30) 
    [21] => Array ([calldate] => 2014-12-01 13:27:39 [src] => 3456 [duration] => 30) 
    [22] => Array ([calldate] => 2014-12-01 13:28:14 [src] => 3456 [duration] => 30) 
    [23] => Array ([calldate] => 2014-12-01 13:28:49 [src] => 3456 [duration] => 30) 
    [24] => Array ([calldate] => 2014-12-01 13:29:24 [src] => 3456 [duration] => 30) 
    [25] => Array ([calldate] => 2014-12-01 13:29:54 [src] => 3456 [duration] => 4) 
) 

我相信這將需要某種形式的for循環,將有比較目前/先前呼叫,並將其添加到一個新的數組。我已經這樣做了,但它沒有給出預期的結果,因爲如果src匹配,它只會將前一個和當前的調用加在一起。這是我目前擁有的代碼:

$adjusted = array(); 
for($i = 1; $i < sizeof($adjustedTotalCallsExt); $i++) { 
$previousCall = $adjustedTotalCallsExt[$i-1]; 
$currentCall = $adjustedTotalCallsExt[$i]; 
    if($previousCall['src'] == $currentCall['src']) { 
     $adjusted[] = $previousCall['duration'] + $currentCall['duration']; 
    } 
    else { 
    $adjusted[] = $currentCall['duration']; 
    } 
}  

回答

0

如果您嘗試基於在不同的情況下,回答給每個呼叫分離出來,PLUS要算同名src不同的基於每個實例,這將打破你的陣列分成基於時間跨度段(好吧,不是實時的,只是數組關鍵的區別)。注意,你可以,如果你想打破這一次只是孤立總的每個實例:

$calls = array(
       0 => array('calldate' => '2014-12-01 08:31:47', 'src' => '1234', 'duration' => 30), 
       1 => array('calldate' => '2014-12-01 08:32:22', 'src' => '1234', 'duration' => 30), 
       2 => array('calldate' => '2014-12-01 08:32:57', 'src' => '1234', 'duration' => 30), 
       3 => array('calldate' => '2014-12-01 08:33:32', 'src' => '1234', 'duration' => 30), 
       4 => array('calldate' => '2014-12-01 08:34:07', 'src' => '1234', 'duration' => 30), 
       5 => array('calldate' => '2014-12-01 08:34:42', 'src' => '1234', 'duration' => 30), 
       6 => array('calldate' => '2014-12-01 08:35:12', 'src' => '1234', 'duration' => 10), 
       7 => array('calldate' => '2014-12-01 08:35:47', 'src' => '1234', 'duration' => 30), 
       8 => array('calldate' => '2014-12-01 08:36:22', 'src' => '1234', 'duration' => 30), 
       9 => array('calldate' => '2014-12-01 08:51:20', 'src' => '5678', 'duration' => 15), 
       10 => array('calldate' => '2014-12-01 09:09:14', 'src' => '5678', 'duration' => 10), 
       11 => array('calldate' => '2014-12-01 09:22:58', 'src' => '9123', 'duration' => 12), 
       12 => array('calldate' => '2014-12-01 09:42:42', 'src' => '4567', 'duration' => 30), 
       13 => array('calldate' => '2014-12-01 09:43:17', 'src' => '4567', 'duration' => 30), 
       14 => array('calldate' => '2014-12-01 09:43:52', 'src' => '4567', 'duration' => 30), 
       15 => array('calldate' => '2014-12-01 09:44:27', 'src' => '4567', 'duration' => 30), 
       16 => array('calldate' => '2014-12-01 09:45:02', 'src' => '4567', 'duration' => 29), 
       17 => array('calldate' => '2014-12-01 09:55:31', 'src' => '9123', 'duration' => 15), 
       18 => array('calldate' => '2014-12-01 10:34:29', 'src' => '8912', 'duration' => 10), 
       19 => array('calldate' => '2014-12-01 13:26:29', 'src' => '3456', 'duration' => 30), 
       20 => array('calldate' => '2014-12-01 13:27:04', 'src' => '3456', 'duration' => 30), 
       21 => array('calldate' => '2014-12-01 13:27:39', 'src' => '3456', 'duration' => 30), 
       22 => array('calldate' => '2014-12-01 13:28:14', 'src' => '3456', 'duration' => 30), 
       23 => array('calldate' => '2014-12-01 13:28:49', 'src' => '3456', 'duration' => 30), 
       24 => array('calldate' => '2014-12-01 13:29:24', 'src' => '3456', 'duration' => 30), 
       25 => array('calldate' => '2014-12-01 13:29:54', 'src' => '3456', 'duration' => 4), 
       26 => array('calldate' => '2014-12-01 13:29:54', 'src' => '1234', 'duration' => 30) 
      ); 
$i = 0; 
foreach($calls as $row) { 

     $user[$row['src']][$i]['calls'][] = $row['duration']; 
     $user[$row['src']][$i]['duration'] = array_sum($user[$row['src']][$i]['calls']); 

     if($row['duration'] < 30) { 
       $i++; 
      } 
    } 

echo '<pre>'; 
print_r($user); 

會給你:

Array 
(
    [1234] => Array 
     (
      [0] => Array 
       (
        [calls] => Array 
         (
          [0] => 30 
          [1] => 30 
          [2] => 30 
          [3] => 30 
          [4] => 30 
          [5] => 30 
          [6] => 10 
         ) 

        [duration] => 190 
       ) 

      [1] => Array 
       (
        [calls] => Array 
         (
          [0] => 30 
          [1] => 30 
         ) 

        [duration] => 60 
       ) 

      [5] => Array 
       (
        [calls] => Array 
         (
          [0] => 30 
         ) 

        [duration] => 30 
       ) 

     ) 

    [5678] => Array 
     (
      [1] => Array 
       (
        [calls] => Array 
         (
          [0] => 15 
          [1] => 10 
         ) 

        [duration] => 25 
       ) 

     ) 

    [9123] => Array 
     (
      [2] => Array 
       (
        [calls] => Array 
         (
          [0] => 12 
         ) 

        [duration] => 12 
       ) 

      [3] => Array 
       (
        [calls] => Array 
         (
          [0] => 15 
         ) 

        [duration] => 15 
       ) 

     ) 

    [4567] => Array 
     (
      [3] => Array 
       (
        [calls] => Array 
         (
          [0] => 30 
          [1] => 30 
          [2] => 30 
          [3] => 30 
          [4] => 29 
         ) 

        [duration] => 149 
       ) 

     ) 

    [8912] => Array 
     (
      [3] => Array 
       (
        [calls] => Array 
         (
          [0] => 10 
         ) 

        [duration] => 10 
       ) 

     ) 

    [3456] => Array 
     (
      [4] => Array 
       (
        [calls] => Array 
         (
          [0] => 30 
          [1] => 30 
          [2] => 30 
          [3] => 30 
          [4] => 30 
          [5] => 30 
          [6] => 4 
         ) 

        [duration] => 184 
       ) 

     ) 

) 
+0

Rasclatts你的答案在不同時間分隔不同的電話,這正是我所需要的。現在我將構建另一個for循環來遍歷新數組,以查找30/60秒持續時間內的呼叫。我修改了If語句中的Rasclatts代碼,使得持續時間<30而不是<15,因爲合併了相距30分鐘的5678 src調用。謝謝。 – Elliot 2014-12-07 09:40:22

0
$adjusted = array(); 
     for($i = 1; $i < sizeof($adjustedTotalCallsExt); $i++) 
     {  
       $adjusted[$adjustedTotalCallsExt[$i]['src']]['duration']=$adjusted[$adjustedTotalCallsExt[$i]['src']]['duration']+ $adjustedTotalCallsExt[$i]['duration'] ;   
     } 

希望這將成爲你的目的。請讓我知道,如果它不適合你。

+0

我認爲你缺少'[$ i] '在那裏。 – Rasclatt 2014-12-06 06:19:56

+0

是的,你是正確的Rasclatt。感謝整改。 – Tristup 2014-12-06 06:57:03

+0

沒問題!乾杯。 – Rasclatt 2014-12-06 06:58:39

相關問題