Valor de operación de una matriz múltiple que tiene la misma clave

Tengo una matriz de matriz

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) } } 

El resultado sumrá todo el valor que tienen las mismas claves, por lo que el resultado debería ser:

 $result = array( "a" =>3000, "b"=>900, "c"=>1500, "e"=>1000 ) 

Alguien podría ayudarme a hacer esto.

Gracias.

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 

(Dejaré la implementación como un ejercicio para OP).

El truco para esto es, por supuesto, hacer algún tipo de iteración sobre sus datos, utilizando esas claves de cadena como identificadores. Una forma de abordarlo sería usar 2 foreaches nesteds (uno sobre el contenedor, uno sobre las claves individuales y recostackr los datos en una matriz central:

 $results = array(); foreach ($array as $elements) { foreach ($elements as $key => $value) { if (!isset($results[$key])) $results[$key] = 0; $results[$key] += $value; } } 

Una forma diferente sería hacer que PHP itere por usted:

 $results = array(); array_walk_recursive( $array, function($value, $key) use (&$results) { if (!isset($results[$key])) $results[$key] = 0; $results[$key] += $value; } ); 

Esta pequeña función hará el trabajo por usted.

 function SummarizeFosArray($array) { $results=array(); foreach ($array as $a) { foreach ($a as $k=>$v) { $results[$k]+=$v; } } return $results; } 

Tu codigo

 $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 "
"; print_r($result); echo "

";

Tu resultado

 Array ( [a] => 3000 [b] => 860 [c] => 1500 [e] => 1000 ) 

use la función array_walk_recursive() . consulte el manual de PHP para más detalles.