Position actuelle: Accueil> Derniers articles> Array_Filter () est-il plus efficace pour remplacer ForEach?

Array_Filter () est-il plus efficace pour remplacer ForEach?

M66 2025-06-03

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:

1. Comparaison de l'utilisation de base

Supposons que nous ayons une gamme de listes d'utilisateurs et que nous voulons filtrer les utilisateurs de plus de 18 ans.

Comment utiliser foreach:

 $users = [
    ['name' => 'Alice', 'age' => 22],
    ['name' => 'Bob', 'age' => 17],
    ['name' => 'Charlie', 'age' => 30],
];

$adults = [];
foreach ($users as $user) {
    if ($user['age'] > 18) {
        $adults[] = $user;
    }
}

Comment utiliser array_filter:

 $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.

2. Comparaison des performances

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";

Exemple des résultats des tests (peut varier selon l'appareil):

 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.

3. Suggestions d'utilisation

  • 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.).

4. Résumé

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 () !