2013-01-07 5 views
8

So habe ich dieses assoziative Array (Dump mit kint getan)Assoziatives Array, Summenwert von den gleichen Schlüssel

dump done with Kint d

Anstatt die Taste "Conference" Wiederholung 3 mal. Ich will es haben nur einmal und fassen die drei Werte in einem um so etwas zu haben:

Konferenz: 4534

Und Gleiche für alle anderen Tasten, die sich wiederholende werden ..

Gibt es eine native Funktion, die das kann?

Antwort

24

Sie können versuchen,

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

Ausgabe

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

Es behält den zweiten Schlüssel "Budget", aber nicht das erste "Ereignis", es gibt dies: [link] (http://d.pr/i/7rKM) – Alucard

+0

Ich muss wirklich die gleiche Struktur aber Summe Werte beibehalten mit dem gleichen Schlüssel – Alucard

+0

Siehe aktualisierten Code – Baba

4

Ein einfacher Vorschlag:

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

    $results[$value['event']] += $value['budget']; 

} 

var_dump($results); 

aktualisieren nach Kommentare

Sie über sie wieder laufen kann:

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

var_dump($structured_results); 
+0

Sie für den Vorschlag danken, aber das würde die Schlüssel des Arrays (Event- und Budget) – Alucard

+0

ich nicht erhalten nicht zu verstehen, warum es sollte, wenn Sie die Werte zusammenfassen wollen? – Repox

+0

Dieses Array ist über JSON codiert und gesendet, um woanders gekocht zu werden, also muss ich die gleiche Struktur beibehalten und nur Werte mit dem gleichen Schlüssel summieren – Alucard

1
$sumArray = array(); 

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

print_r($sumArray); 
+0

Das ist nicht gut - es wird Benachrichtigungen generieren. – mickmackusa

0

Diese Option wird Gruppen- und Summenwerte aller wiederholten Indizes in einem Array.

-Code hier:

$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 

Dies führt in:

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 
Verwandte Themen