2015-11-18 36 views
1

请问我能否请求一些帮助,我不知道如何实现这一点。我有3个数组。我想将它们合并为一个,并且我还想为特定的user_id总结范围,内部和overdiff。合并3个数组并求和每个字段

预期输出数组像这样

user_id => 39, 
full_name => Mila Doe, 
outrange =>20, 
inside=>30, 
overdiff=>50 

预先感谢您。

//阵列1

Array 
(
    [0] => stdClass Object 
     (
      [id] => 5 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [outrange] => 03.55 
     ) 

    [1] => stdClass Object 
     (
      [id] => 2 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [outrange] => 02.00 
     ) 

    [2] => stdClass Object 
     (
      [id] => 1 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [outrange] => 05.00 
     ) 

    [3] => stdClass Object 
     (
      [id] => 3 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [outrange] => 12.00 
     ) 

    [4] => stdClass Object 
     (
      [id] => 4 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [outrange] => 03.00 
     ) 

    [5] => stdClass Object 
     (
      [id] => 6 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [outrange] => 12.00 
     ) 

) 

//数组2

Array 
(
    [0] => Array 
     (
      [id] => 5 
      [user_id] => 39 
      [inside] => -1.0833 
      [fullname] => Mila Doe 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [user_id] => 39 
      [inside] => 4.0000 
      [fullname] => Mila Doe 
     ) 

    [2] => Array 
     (
      [id] => 1 
      [user_id] => 39 
      [inside] => 11.0000 
      [fullname] => Mila Doe 
     ) 

    [3] => Array 
     (
      [id] => 3 
      [user_id] => 39 
      [inside] => 11.0000 
      [fullname] => Mila Doe 
     ) 

    [4] => Array 
     (
      [id] => 4 
      [user_id] => 39 
      [inside] => 2.0000 
      [fullname] => Mila Doe 
     ) 

    [5] => Array 
     (
      [id] => 6 
      [user_id] => 39 
      [inside] => 1.7500 
      [fullname] => Mila Doe 
     ) 

) 

// ARRAY3

Array 
(
    [0] => stdClass Object 
     (
      [id] => 5 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [overdiff] => 03.55 
     ) 

    [1] => stdClass Object 
     (
      [id] => 2 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [overdiff] => 06.00 
     ) 

    [2] => stdClass Object 
     (
      [id] => 1 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [overdiff] => 04.00 
     ) 

    [3] => stdClass Object 
     (
      [id] => 3 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [overdiff] => 11.00 
     ) 

    [4] => stdClass Object 
     (
      [id] => 4 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [overdiff] => 05.00 
     ) 

    [5] => stdClass Object 
     (
      [id] => 6 
      [user_id] => 39 
      [fullname] => Mila Doe 
      [overdiff] => 01.45 
     ) 

) 
+0

你是如何实现user_id = 39的? – sinaza

回答

1

你应该尝试类似的东西。

<?php 

$arrays = array($array1, $array2, $array3); 
//result will be a map : key = user_id, value = information and sums 
$result = array(); 
//go through each array 
foreach ($arrays as $array) { 
    //go through each data of each array 
    foreach ($array as $userData) { 
     //first time we see data about this user ? 
     if (!isset($result[$userData['user_id']])) { 
      $result[$userData['user_id']] = array(); 
     } 

     //set or sum informations of this user in the result array. 
     $result[$userData['user_id']]['user_id'] = $userData['user_id']; 
     $result[$userData['user_id']]['full_name'] = $userData['full_name']; 
     if (isset($userData['outrange'])) { 
      $result[$userData['user_id']]['outrange'] += $userData['outrange']; 
     } 
     if (isset($userData['inside'])) { 
      $result[$userData['user_id']]['inside'] += $userData['inside']; 
     } 
     if (isset($userData['overdiff'])) { 
      $result[$userData['user_id']]['overdiff'] += $userData['overdiff']; 
     } 

    } 
} 

$result = array_values($result);