Regroupement des données d'un tableau multidimensionnel par deux colonnes et addition des valeurs pour chaque groupe
Considérons un tableau créé en combinant les résultats de deux requêtes de base de données distinctes, ressemblant à ce qui suit :
$arr1 = [ ['part' => '1', 'address' => 'aaa', 'type' => '1', 'count' => 5], ['part' => '1', 'address' => 'bbb', 'type' => '1', 'count' => 5], ['part' => '1', 'address' => 'ccc', 'type' => '1', 'count' => 5], ['part' => '2', 'address' => 'aaa', 'type' => '1', 'count' => 5], ['part' => '2', 'address' => 'bbb', 'type' => '1', 'count' => 5], ['part' => '2', 'address' => 'ccc', 'type' => '2', 'count' => 5] ];
L'objectif est de regrouper ce tableau par colonnes « partie » et « type » et de calculer la somme des valeurs « compte » pour chaque groupe.
Pour accomplir Ceci, nous pouvons exploiter la fonction suivante :
<code class="php">function groupByPartAndType($input) { $output = Array(); foreach($input as $value) { $output_element = &$output[$value['part'] . "_" . $value['type']]; $output_element['part'] = $value['part']; $output_element['type'] = $value['type']; !isset($output_element['count']) && $output_element['count'] = 0; $output_element['count'] += $value['count']; } return array_values($output); }</code>
Cette fonction parcourt le tableau d'entrée et remplit un tableau de sortie avec des éléments saisis par la combinaison de valeurs « partie » et « type ». Pour chaque élément de sortie, il définit les champs « partie », « type » et « compte » de manière appropriée, garantissant que le champ « compte » est initialisé à zéro s'il n'est pas déjà défini. La fonction renvoie un tableau des valeurs du tableau de sortie.
En appliquant cette fonction à $arr1, on obtient le résultat souhaité :
$arr2 = [ ['part' => '1', 'type' => '1', 'count' => 15], ['part' => '2', 'type' => '1', 'count' => 10], ['part' => '2', 'type' => '2', 'count' => 5] ];
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!