2013-01-07 28 views
8

の合計値は、だから私は、この連想配列(KINTで行わダンプ)連想配列、同じキー

dump done with Kint D

の代わりに3回繰り返し、キー「Conference」を有していて。

があります..繰り返している他のすべてのキーの4534

と同じこと:

会議:私は一度だけ、それを持っているとのようなものを持っているために、1に3つの値を合計しますそれを行うことができるネイティブ関数?

答えて

24

あなたは

を試すことができますアレイ内のすべての繰り返しのインデックスの0
$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

これは、最初の1つの "イベント"ではなく、2番目のキー "予算"を維持します。これは次のようになります。[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

Iあなたが値を合計することを望んでいないときに、なぜそれがすべきか見ていないでしょうか? – Repox

+0

この配列はjson経由でエンコードされ、別の場所で調理するために送信されるので、同じ構造を保持して同じキーで値を合計する必要があります – Alucard

1
$sumArray = array(); 

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

print_r($sumArray); 
+0

これは良くありません。 – 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