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
)
))
$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
) ))
这个可行,就是步骤多了一点。我记得应该有一个PHP函数可以直接处理NAME重复的问题,但是怎么也想不起来了。
显然解决你的问题肯定要用到这个函数,我也用了, 但是仅仅用这个函数是解决不了问题的,因为你的数组是多维的,且每一维的值都有区别。我的那个代码在数组很大而重复的却不多的情况下效率不高。可以进一步优化代码,
也就是 计算出b和c的差集,然后foreach这个差集 这样效率就高多了,不至于做无用的搜索。
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);