2017-06-20 2 views
-2

Eigentlich habe ich das Array WertArray Sum mit mehrdimensionales Array mit Array Filter PHP

Array ([0] => Array ([total_amount] => 4080 [supplier] => 81) 
     [249] => Array ([total_amount] => 8400 [supplier] => 81) 
     [466] => Array ([total_amount] => 20340 [supplier] => 82) 
     [519] => Array ([total_amount] => 2100 [supplier] => 83) 
     [1078] => Array ([total_amount] => 40199 [supplier] => 83) 
) 

und ich die Ausgabe (Summe der Gesamtmenge des einzelnen Lieferanten) erwartet

Array ([81] => 12480 
     [82] => 20340 
     [83] => 42299 
     ) 

und i versuchte folgenden Code

$new = array_filter($array, function ($var) { return ($var['supplier'] += $var['total_amount']); }); 

Bitte helfen Sie mir zu lösen mein Problem.

Antwort

0

Einfacher Ansatz:

$result = []; 
foreach ($arr as $a) { // $arr is your initial array 
    (isset($result[$a['supplier']]))? 
     $result[$a['supplier']] += $a['total_amount'] 
     : $result[$a['supplier']] = $a['total_amount']; 
} 

print_r($result); 

Der Ausgang:

Array 
(
    [81] => 12480 
    [82] => 20340 
    [83] => 42299 
) 
0

array_filter nicht für Aufgabe wie diese ausgelegt ist, array_walk verwenden insted wie:

$new = []; 
array_walk($array, function ($var) use (&$new) { 
    if(isset($new[$var['supplier']])){ 
     $new[$var['supplier']] += $var['total_amount']; 
    }else{ 
     $new[$var['supplier']] = $var['total_amount']; 
    } 
});