有这么一个数组:
$a = array(2)
{
    [0]=> array(6) {
                    [21]=> int(1)
                    [19]=> int(2)
                    [3]=> int(16)
                   }
    [1]=> array(7) {
                    [21]=> int(1)
                    [12]=> int(1)
                   }

现在我想把这数组中相同键的值相加,如果没有的则保存,组成一新数组,如:
array(1)
{
    [21]=>int(2)
    [19]=>int(2)
    [3]=>int(16)
    [12]=>int(1)
}
但是数组$a个数不一定,是从数据库中取的,我这举例是包含了2个数组,实际可能更多。而且他所包含的数组,里面个数也各不一样,,,。。请高人帮忙。

解决方案 »

  1.   

    $a = array(
      array( 21 => 1, 19 => 2, 3 => 16 ),
      array( 21 => 1, 12 => 1 ),
    );$r = array_shift($a);
    foreach($a as $t) {
      foreach($t as $k=>$v)
        $r[$k] += $v;
    }
    print_r($r);
    Array
    (
        [21] => 2
        [19] => 2
        [3] => 16
        [12] => 1
    )
      

  2.   


    $arr = array(
        0=>array("21"=>1,"19"=>1, "3"=>1),
        1=>array("19"=>2,"3"=>2),
        2=>array("21"=>3,"19"=>3),
        3=>array("25"=>4),
        4=>array("25"=>5,"19"=>5)
    );$merge = $sum = array();
    foreach ($arr as $row)
    {
        $merge = array_unique(array_merge($merge,array_keys($row)));
    }foreach ($arr as $row)
    {
        foreach ($merge as $key)
        {
           if (!isset($sum[$key])) $sum[$key]=0;
           $sum[$key] += isset($row[$key]) ? $row[$key] : 0;
        }}
    var_export($sum);exit;array (
      21 => 4,
      19 => 11,
      3 => 3,
      25 => 9,
    )
      

  3.   


    <?php
    $a = array(
      0=> array(
      21=> 1,
      19=> 2,
      3=> 16
       ),
      1=> array(
      21=> 1,
      12=> 1
       )
    );
    $result=array();
    function yourFun($yourArray,&$result){
    foreach($yourArray as $key=>$val){
    if(is_array($val)){
    yourFun($val,$result);
    }else{echo $val."<br>";
    $result[$key] = (int)($result[$key])+(int)($val);
    }
    }
    }
    yourFun($a,$result);
    var_dump($result);
    ?>
    array(4) { [21]=> int(2) [19]=> int(2) [3]=> int(16) [12]=> int(1) } 
      

  4.   

    貌似运行出错呢而且如果$a中的第一个数组个数没有后面数组中多呢?比如是这样的:
    $a = array(
      array( 21 => 1, 12 => 1 ),
      array( 21 => 1, 19 => 2, 3 => 16 ),
    );
      

  5.   

    }else{echo $val."<br>";   ======>}else{
      

  6.   

    $b=array();
    foreach ($a as $v) array_merge_recursive($b,$v);
    $a=array();
    foreach ($b as $k=>$v) $a[$k]=(is_array($v))?array_sum($v):$b[$k];
    var_dump($a);用数组交/差集可以减少循环,但暂时没空优化
      

  7.   

    忘了赋值,呵呵,上面是 $b=array_merge_recursive($b,$v);