我有一个数组数组
array(4) {
[0]=>
array(3) {
["a"]=>float(1000)
["b"]=>float(3)
["c"]=>float(500)
}
[1]=>
array(3) {
["a"]=>float(1000)
["b"]=>float(852)
["c"]=>float(500)
}
[2]=>
array(3) {
["a"]=>float(1000)
["b"]=>float(5)
["c"]=>float(500)
}
[3]=>
array(1) {
["e"]=>float(1000)
}
}
结果将汇总相同键的所有值,因此结果应为:
$result =
array(
"a" =>3000,
"b"=>900,
"c"=>1500,
"e"=>1000
)
任何人都可以帮我解决这个问题。
感谢。
答案 0 :(得分:5)
result <- new array # array holding result
foreach entry1 in array: # iterate outer array
foreach entry2 in entry1: # iterate each inner array
if not exists result[entry2.key]: # if key is not already in result...
result[entry2.key] = 0 # ... add key and set value to zero
result[entry2.key] += value # increment result for key with value from inner array
(我将把实施作为OP的练习。)
答案 1 :(得分:3)
这方面的技巧是 ofcourse 使用这些字符串键作为标识符对数据进行某种迭代。接近它的一种方法是使用2个嵌套的foreaches(一个在容器上,一个在各个键上,并在中央数组中收集数据:
$results = array();
foreach ($array as $elements)
{
foreach ($elements as $key => $value)
{
if (!isset($results[$key]))
$results[$key] = 0;
$results[$key] += $value;
}
}
另一种方法是让PHP迭代:
$results = array();
array_walk_recursive(
$array,
function($value, $key) use (&$results) {
if (!isset($results[$key]))
$results[$key] = 0;
$results[$key] += $value;
}
);
答案 2 :(得分:2)
这个小功能将为你完成这项工作。
function SummarizeFosArray($array) {
$results=array();
foreach ($array as $a) {
foreach ($a as $k=>$v) {
$results[$k]+=$v;
}
}
return $results;
}
答案 3 :(得分:2)
您的代码
$array = array(
array('a' => 1000, 'b' =>3, 'c'=> 500),
array('a' => 1000, 'b' =>852, 'c'=> 500),
array('a' => 1000, 'b' =>5, 'c'=> 500),
array('e' => 1000)
);
$result = array();
foreach($array as $arr)
{
foreach($arr as $a => $val){
$result[$a] += $val;
}
}
echo "<pre>";
print_r($result);
echo "</pre>";
您的结果
Array
(
[a] => 3000
[b] => 860
[c] => 1500
[e] => 1000
)
答案 4 :(得分:-1)
使用array_walk_recursive()
功能。有关详细信息,请查看PHP手册。