Position actuelle: Accueil> Derniers articles> Quand Array_Filter () doit-il être évité?

Quand Array_Filter () doit-il être évité?

M66 2025-06-03

Dans PHP, Array_Filter () est une fonction très pratique qui peut supprimer les valeurs "vides" d'un tableau ou utiliser des fonctions de rappel pour effectuer un filtrage complexe. Cependant, ce n'est pas le meilleur choix dans tous les scénarios. Dans certains cas, l'utilisation de Array_Filter () peut provoquer des problèmes de performances, confondre la logique de code et même des erreurs dans les résultats. Discutons dans les circonstances que nous devons éviter d'utiliser array_filter () .

1. Lorsque vous vous souciez des clés du tableau

array_filter () conservera les noms de clés du tableau d'origine par défaut, mais ne sera pas réindexé. Si vous vous attendez à un tableau d'index qui augmente en continu à partir de 0, l'utilisation de Array_Filter () peut vous décevoir. Par exemple:

 $data = [0 => 'A', 1 => '', 2 => 'B'];
$result = array_filter($data);

print_r($result);

La sortie est:

 Array
(
    [0] => A
    [2] => B
)

Si vous essayez de le transmettre à l'avant avec JSON_ENCODE pour le moment ou d'accès aux éléments avec des index, cela peut causer des problèmes. À ce stade, vous devez utiliser array_values ​​(array_filter (...)) ou envisager d'utiliser foreach pour le gérer vous-même.

2. Lorsque vous devez garder la valeur égale à False

Array_Filter () supprimera toutes les "fausses valeurs" par défaut (false, 0, null, '', [], etc.), qui détruira l'intégrité des données dans certains scénarios. Par exemple:

 $data = [0, 1, 2, false];
$result = array_filter($data);
print_r($result);

La sortie est:

 Array
(
    [1] => 1
    [2] => 2
)

False et 0 sont supprimés, mais si ces valeurs ont un sens pour vous, par exemple, vous comptez le vote de l'utilisateur (0 signifie objection), cela devient inacceptable.

La solution consiste à passer une fonction de rappel personnalisée:

 $result = array_filter($data, function($val) {
    return $val !== null;
});

Si vous voulez simplement supprimer NULL, ne comptez pas sur le comportement par défaut.

3. Lorsque les performances deviennent un facteur clé

Bien que Array_Filter () soit une fonction de commodité, il est implémenté en traversant l'ensemble du tableau, ce qui peut affecter les performances si vous appelez fréquemment dans un grand ensemble de données, ou dans un scénario de concurrence élevé. Par exemple, l'utilisation répétée de Array_Filter () sur un tableau avec des millions d'enregistrements entraînera une surcharge de performances considérable.

Pour le moment, vous devez déterminer si vous devez vraiment l'utiliser, ou s'il peut être fusionné dans d'autres processus de traitement, tels que le filtrage directement des valeurs indésirables dans les requêtes SQL, plutôt que d'attendre le résultat avant le traitement en PHP.

4. La confusion peut se produire dans les opérations de la chaîne

PHP n'est pas un langage de traitement des données qui prend naturellement prend en charge les appels de chaîne (contrairement à la carte / filtre / réduction de JavaScript), donc l'utilisation d'Array_Filter () dans les appels de chaîne peut facilement provoquer une confusion logique. Par exemple: