两个二维数组合并

$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '9' ),  
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),  
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '4'),  
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '5'),  
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'),  
);
$arr2=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '2' ),  
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),  
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '4'),  
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '5'),  
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'),  
);

怎么去变成
相同userid和data的合并求num的和
$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '11' ),  
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '6' ),  
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '8'),  
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '10'),  
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '14'),  
);

作者: dani1984   发布时间: 2011-05-25

笨方法是FOREACH两层 比较USERID和DATE值如果相同就生成把这个NUM相加放到新数组里去。。。。

作者: knless   发布时间: 2011-05-25

这个我试过不行,行为数组2中存在有相同的值
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '14'。。。。),  
'5' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'.。。。。),
。。。表示后面还有其他的键值而不能被合并。

作者: dani1984   发布时间: 2011-05-25

那也简单 首先和那个新数组里的值比较 如果和新数组里的值相同就跟新数组合并 没有就和另外一个数组合并。。。

作者: knless   发布时间: 2011-05-25

与你上一个问题没有什么区别。
这次写成函数形式
PHP code
$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '9' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '4'),   
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '5'),   
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'),   
);
$arr2=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '2' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '4'),   
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '5'),   
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'),   
);

function Finishing() {
  foreach(func_get_args() as $arr) {
    if(is_array($arr)) {
      foreach($arr as $v) {
        $k = $v['userId'].'_'.$v['date'];
        if(! isset($r[$k]))
          $r[$k] = $v;
        else
          $r[$k]['num'] += $v['num'];
      }
    }
  }
  return array_values($r);
}
print_r(Finishing($arr1, $arr2));



Array
(
  [0] => Array
  (
  [userId] => 1
  [date] => 2011-4-11
  [num] => 11
  )

  [1] => Array
  (
  [userId] => 2
  [date] => 2011-4-12
  [num] => 6
  )

  [2] => Array
  (
  [userId] => 6
  [date] => 2011-4-13
  [num] => 8
  )

  [3] => Array
  (
  [userId] => 3
  [date] => 2011-4-13
  [num] => 10
  )

  [4] => Array
  (
  [userId] => 1
  [date] => 2011-4-12
  [num] => 14
  )

)

作者: xuzuning   发布时间: 2011-05-25

引用 4 楼 xuzuning 的回复:

与你上一个问题没有什么区别。
这次写成函数形式
PHP code
$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '9' ),
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),
'2' => a……

学习了!

作者: lazygc520   发布时间: 2011-05-25