Dans le développement de PHP, nous devons souvent filtrer les éléments qui remplissent certaines conditions des tableaux. L'une des façons les plus courantes consiste à utiliser une boucle FOREAK avec des instructions conditionnelles pour le filtrage. Cependant, la bibliothèque standard PHP fournit également une fonction plus concise - array_filter () , qui est conçue pour cette exigence. Alors la question est:
Supposons que nous ayons une gamme de listes d'utilisateurs et que nous voulons filtrer les utilisateurs de plus de 18 ans.
$users = [
['name' => 'Alice', 'age' => 22],
['name' => 'Bob', 'age' => 17],
['name' => 'Charlie', 'age' => 30],
];
$adults = [];
foreach ($users as $user) {
if ($user['age'] > 18) {
$adults[] = $user;
}
}
$users = [
['name' => 'Alice', 'age' => 22],
['name' => 'Bob', 'age' => 17],
['name' => 'Charlie', 'age' => 30],
];
$adults = array_filter($users, function($user) {
return $user['age'] > 18;
});
En termes de lisibilité au code, Array_Filter () est plus compact et plus clair, surtout lorsque la logique est simple.
Comparons les différences de performances entre les deux avec une grande quantité de données via un script de test simple.
$users = [];
for ($i = 0; $i < 100000; $i++) {
$users[] = ['name' => "User$i", 'age' => rand(10, 50)];
}
// utiliser foreach
$start = microtime(true);
$adults1 = [];
foreach ($users as $user) {
if ($user['age'] > 18) {
$adults1[] = $user;
}
}
$time1 = microtime(true) - $start;
// utiliser array_filter
$start = microtime(true);
$adults2 = array_filter($users, function($user) {
return $user['age'] > 18;
});
$time2 = microtime(true) - $start;
echo "foreach prend du temps: {$time1} Deuxième\n";
echo "array_filter prend du temps: {$time2} Deuxième\n";
foreach prend du temps: 0.025 Deuxième
array_filter prend du temps: 0.027 Deuxième
Comme on peut le voir, la différence de performance est minime , et même dans certains cas, Forach est légèrement plus rapide, car array_filter () utilise également également des boucles en interne et implique également les frais généraux d'un appel de fonction.
Scénarios recommandés où array_filter () est utilisé:
Les conditions sont simples et le code est plus clair.
Vous voulez écrire du code dans un style fonctionnel.
La chaîne de traitement des données doit être utilisée avec d'autres fonctions de tableau (telles que array_map () ).
Scénarios recommandés Forach:
Besoin de performances plus élevées et d'optimisation ultime.
La logique conditionnelle est complexe ou nécessite une interruption des boucles.
Des opérations supplémentaires sont nécessaires pour effectuer le tableau d'origine (tel que l'attribution de référence, etc.).
Bien que ForEach peut être légèrement meilleur dans certains cas, Array_Filter () fournit une solution plus élégante, en particulier lors de la poursuite de la lisibilité au code et de la maintenabilité. En termes de performances, la différence entre les deux est minime et le choix doit être basé sur le scénario réel plutôt que sur la poursuite aveuglément de "l'efficacité" .
Si vous voulez que le code soit plus facile à comprendre et à entretenir, vous pourriez aussi bien essayer Array_Filter () !