Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gruppiere ich Zeilen in einem 2D-Array nach Spalten und summiere eine andere Spalte?

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

Patricia Arquette
Patricia ArquetteOriginal
2024-11-10 08:10:02808Durchsuche

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'],
];

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

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!

Stellungnahme:
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