2013-01-07 121 views
8

总和值,所以我有此关联数组(转储与编制品完成)关联数组中,相同的密钥

dump done with Kint d

代替具有键“Conference”重复3次。我想拥有它只有一次,为了有类似求和3个值转换成一个:

会议:4534

而且同样的事情被重复的所有其他键..

有一个本地函数可以做到这一点?

回答

24

您可以尝试

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

) 
+0

它保留第二个关键“预算”,但不是第一个“事件”,它给出了这个:[link](http://d.pr/i/7rKM) – Alucard

+0

我真的需要保持相同的结构,但总值使用相同的密钥 – Alucard

+0

查看更新代码 – Baba

4

一个简单的建议:

$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); 
+0

谢谢你的建议,但不会保留数组的键(事件和预算) – Alucard

+0

我当你不想总结价值观时,不明白为什么它应该如此? – Repox

+0

这个数组通过json编码并发送到其他地方进行烹饪,所以我需要保留相同的结构,并用相同的密钥对数值进行求和。 – Alucard

1
$sumArray = array(); 

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

print_r($sumArray); 
+0

这不好 - 它会生成Notices。 – mickmackusa

0

此选项将阵列中的所有重复索引的组和总和值。

代码在这里:

$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 
相关问题