Dans PHP, Array_Chunk et Array_Reduce sont deux fonctions de fonctionnement de la table très puissantes. Array_chunk peut diviser un grand tableau en plusieurs petits tableaux, tandis que Array_reduce peut traiter récursivement des éléments dans le tableau, puis les agréger. Dans certains cas, nous voulons regrouper les tableaux et faire une sorte d'opération d'agrégation après le regroupement. Cet article expliquera comment combiner ces deux fonctions pour atteindre cet objectif.
Array_Chunk est une fonction en PHP qui divise un tableau en plusieurs petits tableaux. Il divise le tableau d'origine en plusieurs sous-réseaux en fonction de la taille spécifiée, renvoyant un tableau bidimensionnel. Par exemple:
$array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$chunks = array_chunk($array, 3);
print_r($chunks);
Le résultat de la sortie est:
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[1] => Array
(
[0] => 4
[1] => 5
[2] => 6
)
[2] => Array
(
[0] => 7
[1] => 8
[2] => 9
)
)
Dans cet exemple, Array_Chunk divise le tableau d'origine en trois sous-réseaux de taille 3.
La fonction Array_reduce accepte un tableau et une fonction de rappel en tant que paramètres et effectue une opération "réduire" sur les éléments du tableau. Il commence par le premier élément du tableau et passe l'élément actuel avec le résultat de l'élément précédent à la fonction de rappel, renvoyant finalement une seule valeur. Par exemple:
$array = [1, 2, 3, 4, 5];
$sum = array_reduce($array, function($carry, $item) {
return $carry + $item;
});
echo $sum; // Sortir 15
Dans cet exemple, Array_reduce accumule des éléments dans le tableau et renvoie enfin la somme du tableau.
Maintenant que nous connaissons l'utilisation de base de Array_Chunk et Array_Reduce , nous pouvons essayer de les combiner pour implémenter le regroupement et l'agrégation des tableaux.
Supposons que nous ayons un tableau contenant des données de commande utilisateur, nous voulons regrouper les commandes par ID utilisateur et calculer le montant total de la commande pour chaque utilisateur. Nous pouvons d'abord utiliser Array_Chunk pour regrouper par l'ID utilisateur, puis utiliser Array_reduce pour agréger et calculer chaque ensemble de données.
// Supposons que les données de commande suivantes sont disponibles,Chaque ordre contient un user_id et le montant amount
$orders = [
['user_id' => 1, 'amount' => 100],
['user_id' => 2, 'amount' => 200],
['user_id' => 1, 'amount' => 150],
['user_id' => 3, 'amount' => 300],
['user_id' => 2, 'amount' => 50],
['user_id' => 1, 'amount' => 200],
];
// utiliser array_chunk selon user_id Commandes de groupe
$chunks = array_chunk($orders, 2); // Supposons qu'il existe au plus deux commandes par groupe
// utiliser array_reduce Les montants de commande globaux par groupe
$result = array_map(function($chunk) {
return array_reduce($chunk, function($carry, $item) {
$carry['user_id'] = $item['user_id'];
$carry['total_amount'] += $item['amount'];
return $carry;
}, ['total_amount' => 0]);
}, $chunks);
// Sortir结果
print_r($result);
Résultat de sortie:
Array
(
[0] => Array
(
[user_id] => 1
[total_amount] => 250
)
[1] => Array
(
[user_id] => 2
[total_amount] => 250
)
[2] => Array
(
[user_id] => 3
[total_amount] => 300
)
)
Dans cet exemple, nous regroupons d'abord les données de commande par 2 commandes par groupe à l'aide de Array_Chunk . Nous agrégeons ensuite chaque groupe de commandes utilisant Array_reduce pour calculer le montant total de la commande pour chaque utilisateur.
Si nous encapsulons l'opération ci-dessus dans une fonction complète, le code est le suivant:
function groupAndAggregateOrders($orders) {
// selon用户 ID Regroupement
$chunks = array_chunk($orders, 2); // Supposons qu'il existe au plus deux commandes par groupe
// 对每个Regroupement计算用户的总订单金额
return array_map(function($chunk) {
return array_reduce($chunk, function($carry, $item) {
$carry['user_id'] = $item['user_id'];
$carry['total_amount'] += $item['amount'];
return $carry;
}, ['total_amount' => 0]);
}, $chunks);
}
// Tester les données
$orders = [
['user_id' => 1, 'amount' => 100],
['user_id' => 2, 'amount' => 200],
['user_id' => 1, 'amount' => 150],
['user_id' => 3, 'amount' => 300],
['user_id' => 2, 'amount' => 50],
['user_id' => 1, 'amount' => 200],
];
// Fonctions d'appel
$result = groupAndAggregateOrders($orders);
// Sortir结果
print_r($result);
En combinant array_chunk et array_reduce , nous pouvons facilement regrouper les tableaux et les agréger. Array_chunk nous permet de diviser les données en plusieurs groupes, tandis que Array_reduce nous permet d'effectuer des calculs d'agrégation personnalisés au sein de chaque groupe. La combinaison de ces deux peut améliorer considérablement la lisibilité du code et la capacité de traiter des données complexes.