有这么一个数组:
$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个数组,实际可能更多。而且他所包含的数组,里面个数也各不一样,,,。。请高人帮忙。
$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个数组,实际可能更多。而且他所包含的数组,里面个数也各不一样,,,。。请高人帮忙。
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
)
$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,
)
<?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) }
$a = array(
array( 21 => 1, 12 => 1 ),
array( 21 => 1, 19 => 2, 3 => 16 ),
);
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);用数组交/差集可以减少循环,但暂时没空优化