php - How do I merge data into Multidimentional array based on a value in current/previous array -


i building phone statistics , have output below need merge same src , add duration together. example array index 0 through 6 merge 1 array following:

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

you're thinking shouldn't index 0 through 8 because index 6 10 seconds signifies call answered. can assumed if call duration 30 seconds has not been answered.

it's not simple finding src match in array , adding durations though see in index 11 9123 calls , answered within 12 seconds call around 30 minutes later , second call @ 9:55:31 answered within 15 seconds, need to separate items in final array.

the src's fictional , not numbers in real world.

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

i believe need sort of loop have compare current/previous calls , add them new array. have done isn't giving expected result adds previous , current call if src matches. here code have:

$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'];     } }      

if trying separate out each call based on answered in separate instances, plus want count same named src differently based on each instance, break array down sections based on spans of time (well, not real time, array key differences). note, can break down 1 more time isolate each instance of total if want:

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

will give you:

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

Comments

Popular posts from this blog

python - mat is not a numerical tuple : openCV error -

c# - MSAA finds controls UI Automation doesn't -

wordpress - .htaccess: RewriteRule: bad flag delimiters -