2011-12-01 90 views
1

我有两个PHP数组像这样:如何合并两个2D php数组,同时我想合并一些值?

Array 
(
[0] => Array 
    (
     [id] => 712 
     [count] => 5 
    ) 

[1] => Array 
    (
     [id] => 5510 
     [count] => 3 
    ) 
) 

Array 
(
[0] => Array 
    (
     [id] => 856 
     [count] => 7 
    ) 

[1] => Array 
    (
     [id] => 5510 
     [count] => 10 
    ) 
) 

现在我要作出这样的合并结果:

Array 
(
[0] => Array 
    (
     [id] => 712 
     [count] => 5 
    ) 

[1] => Array 
    (
     [id] => 856 
     [count] => 3 
    ) 
[2] => Array 
    (
     [id] => 5510 
     [count] => 13 
    ) 
) 

只需添加count了那些具有相同id的。
当然,真实数组比上面的例子复杂得多。

你能告诉我一个方法来处理这个吗?

+0

如果它只有两列这样的,我将其转化为一个键=>值数组并重复该操作 – JohnP

回答

1

这应该为你工作

/** 
* merge counts for arrays 
* @param array $arrays,... 
* @return array 
*/ 
function merge_counts(){ 

    $arrays = func_get_args(); 

    $ret = array(); 

    foreach($arrays as $arr){ 
     foreach($arr as $item){ 
      if(array_key_exists($k = $item['id'], $ret)){ 
       $ret[$k]['count'] += $item['count']; 
      } 
      else { 
       $ret[$k] = $item; 
      } 
     } 
    } 

    return array_values($ret); 
} 

使用

$result = merge_counts($one, $two);  
print_r($result); 

// alternatively... 
// $result = merge_counts($one, $two, $three, ...); 

输出

Array 
(
    [0] => Array 
     (
      [id] => 712 
      [count] => 5 
     ) 

    [1] => Array 
     (
      [id] => 5510 
      [count] => 13 
     ) 

    [2] => Array 
     (
      [id] => 856 
      [count] => 7 
     ) 

) 
+0

谢谢!这是我想要的答案! – Aloong