Итак, у меня есть этот ассоциативный массив (сброс с кинтом)
d
Вместо того, чтобы повторять три раза «Концерт». Я хочу иметь его только один раз и суммировать 3 значения в одном, чтобы иметь что-то вроде:
Конференция: 4534
И то же самое для всех остальных ключей, которые повторяются.
Есть ли встроенная функция, которая может это сделать?
Можешь попробовать
$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));
Вывод
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 ) )
Простое предложение:
$results = array(); foreach ($budgetByEventTemp as $value) { if( ! isset($results[$value['event']]) ) { $results[$value['event']] = 0; } $results[$value['event']] += $value['budget']; } var_dump($results);
Обновление по комментариям
Вы можете снова запустить их:
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);
Эта опция группирует и суммирует значения всех повторных индексов в массиве.
Код здесь:
$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
Это приведет к:
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