2016-07-11 11 views
0

Wenn ich ein Array wie diese, wo einige Werte der [0] Taste wiederholt werden:Holen Sie sich ein einzigartiges multidimensionales Array mit einigen zusammengezählten Werten?

$input = array(
    array("7", 2, 16,  46, 736), 
    array("7", 2, 16, 6.0243, 96.39), 
    array("8", 2, 16, 7.0243, 112.39), 
    array("8", 2, 16,  47, 752), 
    array("8", 2, 16, 7.0243, 112.39), 
    array("9", 0, 0, 8.0243,  0), 
    array("10", 0, 0, 9.0243,  0), 
    array("10", 0, 0,  49,  0), 
); 

Was muss ich einen Schlüssel [0] einzigartigen Array erstellen tun, wo Tasten [2], [3] und [4] summiert werden, wenn der Schlüssel [0] den gleichen Wert hat, wie folgt aus:

$output = array(
    array("7", 2, 32, 52.0243, 832.39), 
    array("8", 2, 48, 61.0486, 976.78), 
    array("9", 0, 0, 8.0243,  0), 
    array("10", 0, 0, 58.0243,  0), 
); 

Antwort

1

Es sieht aus wie Sie eine database aggregate function in PHP zu implementieren versuchen. Das zugrundeliegende Konzept bei dem Versuch, etwas wie das zu tun, besteht darin, den Wert (oder die Werte) zu verwenden, den Sie gruppieren möchten, als Schlüssel in Ihrem Ergebnis-Array. So Schleife über den Satz von Zeilen wie folgt:

foreach ($original as $row) { 

    $key = $row[0];    // use the column you want to group by as the key 

    if (!isset($new[$key])) { 
     $new[$key] = $row;   // for new instances of the key, just add the whole row 
    } else { 

     // if the key has already been set, add to the non-key columns to accumulate the sum 

     $new[$key][2] += $row[2]; 
     $new[$key][3] += $row[3]; 
     $new[$key][4] += $row[4]; 
    } 
} 

Natürlich, wenn die Daten, die Sie mit tatsächlich aus einer Datenbank kommt Arbeit sind, wird es wahrscheinlich besser, die Gruppierung und Summen in Ihrer SELECT-Abfrage zu tun anstatt es in PHP zu tun:

SELECT col1, MAX(col2), SUM(col3), SUM(col4), SUM(col5) FROM your_table GROUP BY col1