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