Maison >développement back-end >tutoriel php >Comment regrouper des lignes par une colonne spécifique et additionner une autre colonne dans un tableau 2D ?
Regroupement de données et addition de colonnes dans un tableau 2D
Dans les scénarios de traitement de données, vous pouvez rencontrer le besoin de regrouper les lignes d'un tableau 2D en fonction d'une colonne spécifiée, puis accumulez les valeurs dans une autre colonne au sein de chaque groupe.
Énoncé du problème :
Étant donné un tableau d'entrée comme celui présenté ci-dessous :
[ ['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'], ]
Vous souhaitez regrouper les lignes par la colonne « dd » et additionner les valeurs « quantité » au sein de chaque groupe. Le résultat attendu est :
[ ['quantity' => 15, 'dd' => '01-Nov-2012'], ['quantity' => 3, 'dd' => '02-Nov-2012'], ['quantity' => 19, 'dd' => '03-Nov-2012'], ]
Solution :
Pour y parvenir, nous pouvons utiliser un simple mécanisme de bouclage. En commençant par la première ligne, nous vérifions si la valeur 'dd' est déjà présente dans le tableau de sortie. Sinon, nous créons une nouvelle entrée pour ce « dd » et initialisons la « quantité » à 0.
Ensuite, pour chaque ligne, nous ajoutons la « quantité » au groupe correspondant dans le tableau de sortie. Nous répétons ce processus jusqu'à ce que toutes les lignes aient été traitées. Enfin, nous convertissons le tableau de sortie en indexation numérique à l'aide de array_values().
Le code PHP suivant illustre la solution :
$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);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!