Array
(
    [0] => Array
        (
            [name] => goods
            [data] => Array
                (
                    [access_time] => 1297836795000
                    [num] => 6
                )
 
        )
 
    [1] => Array
        (
            [name] => article
            [data] => Array
                (
                    [access_time] => 1297831430000
                    [num] => 4
                )
 
        )
 
    [2] => Array
        (
            [name] => goods
            [data] => Array
                (
                    [access_time] => 1297836785000
                    [num] => 2
                )
 
        )
    [3] => Array
        (
            [name] => member
            [data] => Array
                (
                    [access_time] => 1297836785000
                    [num] => 2
                )
 
        ))以上数组如何变成Array
(
    [0] => Array
        (
            [name] => goods
            [data] => Array
                (
                    [access_time] => 1297836795000
                    [num] => 8                
                )
 
        )
 
    [1] => Array
        (
            [name] => article
            [data] => Array
                (
                    [access_time] => 1297831430000
                    [num] => 4
                )
 
        )
    [2] => Array
        (
            [name] => member
            [data] => Array
                (
                    [access_time] => 1297836785000
                    [num] => 2
                )
 
        ))

解决方案 »

  1.   

    数组中相同的 name 合并 然后再把 num 相加
      

  2.   


    $a = array(
      array('name'=>'goods','data'=>array('access_time'=>'1297836795000','num'=>'6')),
      array('name'=>'article','data'=>array('access_time'=>'1297831430000','num'=>'4')),
      array('name'=>'goods','data'=>array('access_time'=>'1297836785000','num'=>'2')),
      array('name'=>'member','data'=>array('access_time'=>'1297836785000','num'=>'2')),
      array('name'=>'liuyan','data'=>array('access_time'=>'1297836765000','num'=>'8')),
      array('name'=>'xiaohua','data'=>array('access_time'=>'1297836766000','num'=>'8')),
      array('name'=>'liuyan','data'=>array('access_time'=>'1297836765000','num'=>'8'))
    );$c = array();
    $out = array() ;
    foreach($a as $k=>$v){
      $c[] = $a[$k]['name'] ;
    }$b = array_unique ($c);foreach($b as $k=>$v){
      $sum = 0 ;
      foreach($a as $i=>$m){
        if($m['name']==$v){
          $sum += $m['data']['num'] ;
          
        }
      }
      
      $out[$k]['name'] = $v ;
      $out[$k]['data']['access_time'] = $a[$k]['data']['access_time'] ;
      $out[$k]['data']['num'] = $sum ;
      
    }
    $out = array_values($out);
    print_r($out);输出:
    Array
    (
        [0] => Array
            (
                [name] => goods
                [data] => Array
                    (
                        [access_time] => 1297836795000
                        [num] => 8
                    )        )    [1] => Array
            (
                [name] => article
                [data] => Array
                    (
                        [access_time] => 1297831430000
                        [num] => 4
                    )        )    [3] => Array
            (
                [name] => member
                [data] => Array
                    (
                        [access_time] => 1297836785000
                        [num] => 2
                    )        )    [4] => Array
            (
                [name] => liuyan
                [data] => Array
                    (
                        [access_time] => 1297836765000
                        [num] => 16
                    )        )    [5] => Array
            (
                [name] => xiaohua
                [data] => Array
                    (
                        [access_time] => 1297836766000
                        [num] => 8
                    )        ))
      

  3.   


    这个可行,就是步骤多了一点。我记得应该有一个PHP函数可以直接处理NAME重复的问题,但是怎么也想不起来了。
      

  4.   

    楼主说的是这个函数:array_unique
    显然解决你的问题肯定要用到这个函数,我也用了, 但是仅仅用这个函数是解决不了问题的,因为你的数组是多维的,且每一维的值都有区别。我的那个代码在数组很大而重复的却不多的情况下效率不高。可以进一步优化代码,
    也就是 计算出b和c的差集,然后foreach这个差集 这样效率就高多了,不至于做无用的搜索。
      

  5.   

    这样效率更高些$a = array(
      array('name'=>'goods','data'=>array('access_time'=>'1297836795000','num'=>'6')),
      array('name'=>'article','data'=>array('access_time'=>'1297831430000','num'=>'4')),
      array('name'=>'goods','data'=>array('access_time'=>'1297836785000','num'=>'2')),
      array('name'=>'member','data'=>array('access_time'=>'1297836785000','num'=>'2')),
      array('name'=>'liuyan','data'=>array('access_time'=>'1297836765000','num'=>'8')),
      array('name'=>'xiaohua','data'=>array('access_time'=>'1297836766000','num'=>'8')),
      array('name'=>'liuyan','data'=>array('access_time'=>'1297836765000','num'=>'8'))
    );$c = array();
    $out = array() ;
    foreach($a as $k=>$v){
      $c[] = $a[$k]['name'] ;
    }$b = array_unique ($c);
    $d = array_diff_key($c,$b) ;
    array_values($d);
    $e = array_intersect($b,$d);foreach($b as $k=>$v){
      $out[$k]['name'] = $a[$k]['name'] ;
      $out[$k]['data']['access_time'] = $a[$k]['data']['access_time'] ;
      $out[$k]['data']['num'] = $a[$k]['data']['num'] ;
    }foreach($e as $k=>$v){
      $sum = 0 ;
      foreach($a as $i=>$m){
        if($m['name']==$v){
          $sum += $m['data']['num'] ;
          
        }
      }
      $out[$k]['name'] = $v ;
      $out[$k]['data']['access_time'] = $a[$k]['data']['access_time'] ;
      $out[$k]['data']['num'] = $sum ;
    }
    $out = array_values($out);
    print_r($out);