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

解决方案 »

  1.   

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

  2.   

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

  3.   

    与你上一个问题没有什么区别。
    这次写成函数形式
    $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
            ))
      

  4.   

    这样更直观:$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 arrayMerge($array1,$array2){
    $num = count($array1);
    $newarr = array();
    for($i=0;$i<$num;$i++){
    if(!(strcasecmp($array1[$i]['userId'], $array2[$i]['userId'])||strcasecmp($array1[$i]['date'], $array2[$i]['date']))){
    $newarr[$i]['userId'] = $array1[$i]['userId'];
    $newarr[$i]['date'] = $array1[$i]['date'];
    $newarr[$i]['num'] = $array1[$i]['num']+$array2[$i]['num'];
    }
    }
    return $newarr;
    }
    print_r(arrayMerge($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
      ))