Dans PHP, array_filter () et array_map () sont deux fonctions de traitement de la table très puissantes et couramment utilisées. Le premier est utilisé pour filtrer les éléments dans un tableau, tandis que le second est utilisé pour transformer chaque élément dans le tableau. Les utiliser seuls peut résoudre de nombreux problèmes, mais l'utilisation des deux ensemble peut traiter plus efficacement les données dans des structures complexes, telles que des tableaux imbriqués, des tableaux d'objets ou une logique métier qui nécessite plusieurs étapes de traitement.
Cet article utilisera un exemple pratique pour démontrer comment combiner intelligemment array_filter () et array_map () pour implémenter le filtrage et la conversion de tableaux complexes.
Supposons que nous ayons un éventail d'utilisateurs, chaque utilisateur contient des informations telles que le nom, l'âge, l'adresse e-mail, le statut, etc. Nos objectifs sont:
Seuls les utilisateurs ayant un statut "actif" sont conservés;
Convertir le nom de chaque utilisateur en capital;
Sortir uniquement deux champs: nom et boîte aux lettres;
L'exemple de tableau d'origine est le suivant:
$users = [
['name' => 'Alice', 'age' => 25, 'email' => 'alice@m66.net', 'status' => 'active'],
['name' => 'Bob', 'age' => 30, 'email' => 'bob@m66.net', 'status' => 'inactive'],
['name' => 'Charlie', 'age' => 22, 'email' => 'charlie@m66.net', 'status' => 'active'],
];
Utilisons d'abord array_filter () pour filtrer les utilisateurs avec un état actif:
$activeUsers = array_filter($users, function($user) {
return $user['status'] === 'active';
});
Une fois cette étape exécutée, $ ActiveUsers ne contient qu'Alice et Charlie.
Ensuite, nous capitalisons le nom avec array_map () et conservons uniquement les champs dont nous nous soucions (nom et e-mail):
$transformedUsers = array_map(function($user) {
return [
'name' => strtoupper($user['name']),
'email' => $user['email']
];
}, $activeUsers);
Résultat de sortie:
[
['name' => 'ALICE', 'email' => 'alice@m66.net'],
['name' => 'CHARLIE', 'email' => 'charlie@m66.net']
]
Si vous voulez que le code soit plus concis, vous pouvez enchaîner les deux fonctions. Bien que Array_Filter () lui-même ne renvoie pas le tableau de réinitialisation des clés, il fonctionne mieux avec array_values () :
$processedUsers = array_map(function($user) {
return [
'name' => strtoupper($user['name']),
'email' => $user['email']
];
}, array_values(array_filter($users, function($user) {
return $user['status'] === 'active';
})));
La combinaison array_filter () et array_map () peut rendre très flexible pour traiter les tableaux complexes, réalisant d'abord la séparation logique de "filtre, puis converti". Cette méthode est très adaptée à une utilisation dans des scénarios tels que le traitement des données API de traitement, le prétraitement des données du formulaire et le flux de données commerciales.
N'oubliez pas non plus que si vous avez affaire à des tableaux associatifs ou si vous devez préserver les noms de clés, vous pouvez envisager d'utiliser array_keys () , array_values () ou utiliser des bibliothèques fonctionnelles plus avancées telles que la classe de collecte de Laravel pour améliorer la lisibilité et les fonctionnalités.