具有相同键的多个数组的操作值

时间:2011-03-17 08:11:44

标签: php arrays multidimensional-array

我有一个数组数组

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
  )

任何人都可以帮我解决这个问题。

感谢。

5 个答案:

答案 0 :(得分:5)

Pseudo

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手册。