sumar columna array php arrays sum associative-array

sumar columna array php



Matriz asociativa, suma valores de la misma clave (4)

Puedes probar

$data = array( 0 => array( ''event'' => ''Conference'', ''budget'' => 3700, ), 1 => array( ''event'' => ''Conference'', ''budget'' => 500, ), 2 => array( ''event'' => ''Showroom'', ''budget'' => 1000, ), 3 => array( ''event'' => ''Mission Chez client'', ''budget'' => 2000, ), 4 => array( ''event'' => ''Séminaire'', ''budget'' => 700, ), 5 => array( ''event'' => ''Livraison'', ''budget'' => 4000, ), 6 => array( ''event'' => ''Conference'', ''budget'' => 334, ), ); $sum = array_reduce($data, function ($a, $b) { isset($a[$b[''event'']]) ? $a[$b[''event'']][''budget''] += $b[''budget''] : $a[$b[''event'']] = $b; return $a; }); print_r(array_values($sum));

Salida

Array ( [0] => Array ( [event] => Conference [budget] => 4534 ) [1] => Array ( [event] => Showroom [budget] => 1000 ) [2] => Array ( [event] => Mission Chez client [budget] => 2000 ) [3] => Array ( [event] => Séminaire [budget] => 700 ) [4] => Array ( [event] => Livraison [budget] => 4000 ) )

Así que tengo esta matriz asociativa (volcado hecho con kint)

re

En lugar de tener la clave " Conference " repitiendo 3 veces. Quiero tenerlo solo una vez y sumar los 3 valores en uno para poder tener algo como:

Conferencia: 4534

Y lo mismo para todas las otras teclas que se repiten ...

¿Hay alguna función nativa que pueda hacer eso?


Una sugerencia simple:

$results = array(); foreach ($budgetByEventTemp as $value) { if( ! isset($results[$value[''event'']]) ) { $results[$value[''event'']] = 0; } $results[$value[''event'']] += $value[''budget'']; } var_dump($results);

Actualización de acuerdo a los comentarios

Puedes repasarlos de nuevo:

foreach($results as $key => $value) { $structured_results[] = array(''event'' => $key, ''budget'' => $value); } var_dump($structured_results);


$sumArray = array(); foreach ($myArray as $k=>$subArray) { foreach ($subArray as $id=>$value) { $sumArray[$id]+=$value; } } print_r($sumArray);


Esta opción agrupará y sumará los valores de todos los índices repetidos en una matriz.

Codifique aquí:

$aValues[]=array("nametogroup",10); $aValues[]=array("nametogroup",20); $aValues[]=array("nametogroup2",30); $aValues[]=array("nametogroup2",20); echo var_dump($aValues); // array before grouping foreach ($aValues as $id=>$value) { $a2sum["{$value[0]}"]=$value[1] + $a2sum["{$value[0]}"]; } echo var_dump($a2sum); //array after group and adding values

Esto dará como resultado:

array 0 => array 0 => string nametogroup (length=11) 1 => int 10 1 => array 0 => string nametogroup (length=11) 1 => int 20 2 => array 0 => string nametogroup2 (length=12) 1 => int 30 3 => array 0 => string nametogroup2 (length=12) 1 => int 20 array nametogroup => int 30 nametogroup2 => int 50