Wie gruppiere ich Zeilen in einem 2D-Array nach Spalten und summiere eine andere Spalte?

Patricia Arquette
Freigeben: 2024-11-10 08:10:02
Original
787 Leute haben es durchsucht

How to Group Rows in a 2D Array by Column and Sum Another Column?

2D-Array-Zeilendaten nach Spalte gruppieren und eine weitere Spalte summieren

Bei der Analyse tabellarischer Daten ist es häufig erforderlich, Zeilen basierend auf gemeinsamen Daten zu konsolidieren Werte in bestimmten Spalten, während Berechnungen für andere Spalten durchgeführt werden. Stellen Sie sich der Herausforderung, 2D-Array-Zeilen zu gruppieren und Werte aus einer anderen Spalte zu summieren.

Problemstellung:

Sie erhalten ein 2D-Array, in dem jede Zeile einen Dateneintrag darstellt . Das Ziel besteht darin, diese Zeilen nach einer bestimmten Gruppierungsspalte (z. B. „dd“) zu gruppieren und die Werte aus einer anderen Spalte (z. B. „Menge“) innerhalb jeder Gruppe zu summieren. Das Ergebnis sollte ein reduziertes 2D-Array mit eindeutigen Gruppierungswerten und den entsprechenden summierten Spaltenwerten sein.

Beispiel:

Input:
[
    ['quantity' => 5,  'dd' => '01-Nov-2012'],
    ['quantity' => 10, 'dd' => '01-Nov-2012'],
    ['quantity' => 3,  'dd' => '02-Nov-2012'],
    ['quantity' => 4,  'dd' => '03-Nov-2012'],
    ['quantity' => 15, 'dd' => '03-Nov-2012'],
];

Desired result:
[
    ['quantity' => 15, 'dd' => '01-Nov-2012'],
    ['quantity' => 3,  'dd' => '02-Nov-2012'],
    ['quantity' => 19, 'dd' => '03-Nov-2012'],
];
Nach dem Login kopieren

Lösung:

Um dieses Problem zu lösen, führen Sie die folgenden Schritte aus:

  1. Iterieren Sie über jede Zeile: Durchlaufen Sie das eingegebene 2D-Array Zeile für Zeile.
  2. Auf vorhandene Gruppe prüfen:Bestimmen Sie, ob eine Gruppe für den Gruppierungswert der aktuellen Zeile ('dd') bereits in einem Ausgabearray vorhanden ist.
  3. Erstellen Sie bei Bedarf eine neue Gruppe: Wenn für den Gruppierungswert der aktuellen Zeile keine Gruppe vorhanden ist, erstellen Sie einen neuen Eintrag im Ausgabearray mit dem Gruppierungswert und einem anfänglichen „Menge“-Wert von 0.
  4. Menge akkumulieren: Inkrementieren der „Mengen“-Wert der vorhandenen oder neu erstellten Gruppe durch den „Mengen“-Wert der aktuellen Zeile.
  5. Endgültiges Array extrahieren: Konvertieren Sie das Ausgabearray zurück in ein numerisch indiziertes Format, um es mit dem zu vergleichen gewünschtes Ergebnis.

Hier ist eine Beispielimplementierung in PHP:

$in = array(array()); // your input
$out = array();
foreach ($in as $row) {
    if (!isset($out[$row['dd']])) {
        $out[$row['dd']] = array(
            'dd' => $row['dd'],
            'quantity' => 0,
        );
    }
    $out[$row['dd']]['quantity'] += $row['quantity'];
}
$out = array_values($out); // make the out array numerically indexed
var_dump($out);
Nach dem Login kopieren

Diese Lösung gruppiert Zeilen effizient nach der angegebenen Spalte, akkumuliert Spaltenwerte innerhalb jeder Gruppe und erzeugt ein reduziertes 2D Array als gewünschtes Ergebnis.

Das obige ist der detaillierte Inhalt vonWie gruppiere ich Zeilen in einem 2D-Array nach Spalten und summiere eine andere Spalte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage