Position actuelle: Accueil> Derniers articles> Que dois-je faire si array_filter () ne filtre pas comme prévu?

Que dois-je faire si array_filter () ne filtre pas comme prévu?

M66 2025-06-05

Dans PHP, la fonction Array_Filter () est utilisée pour filtrer les éléments du tableau via une fonction de rappel. Lorsque vous utilisez cette fonction, il iratera le tableau et décidera de conserver l'élément en fonction de la valeur de retour de la fonction de rappel. Si la fonction de rappel renvoie true , l'élément sera conservé; Si faux , l'élément sera filtré.
Cependant, parfois Array_Filter () ne semble pas fonctionner, ce qui rend le résultat incompatible avec les attentes. Ensuite, nous discuterons de certains problèmes et solutions courants.

1. La valeur de retour de la fonction de rappel ne répond pas aux attentes

La fonction de rappel utilisée par array_filter () doit renvoyer une valeur booléenne. Si la fonction de rappel renvoie Null , False ou d'autres valeurs fausses, les éléments seront filtrés. Si le vrai est retourné, l'élément est conservé. Si vous constatez que Array_Filter () ne fonctionne pas comme prévu, il est très important de vérifier la valeur de retour de la fonction de rappel.

Exemple de question:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
    if ($value % 2 == 0) {
        return 1;  // Il doit être retourné ici true,Plutôt 1
    }
    return false;
});
print_r($result);

Solution: assurez-vous que la fonction de rappel renvoie une valeur booléenne True ou False , pas une autre valeur.

Code corrigé:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
    return $value % 2 == 0;  // Renvoyer une valeur booléenne true ou false
});
print_r($result);

2. Le type de paramètre de la fonction de rappel est incorrect

Si le type de paramètre attendu de la fonction de rappel ne correspond pas au type de l'élément de tableau réellement passé, il peut ne pas être filtré correctement les éléments. Par exemple, lorsque la fonction de rappel prévoit de recevoir des valeurs entières, il passe en fait une chaîne ou un autre type de données.

Exemple de question:

 $arr = ["1", "2", "3", "4", "5"];
$result = array_filter($arr, function($value) {
    return $value % 2 == 0;  // Ici $value C'est une chaîne,Provoquant des résultats inattendus
});
print_r($result);

Solution: utilisez la coulée ou assurez-vous que le type d'élément du tableau correspond aux exigences de la fonction de rappel.

Code corrigé:

 $arr = ["1", "2", "3", "4", "5"];
$result = array_filter($arr, function($value) {
    return (int)$value % 2 == 0;  // Coulé à entier
});
print_r($result);

3. Traitement des tableaux vides ou des valeurs vides

Array_Filter () filtrera toutes les fausses valeurs dans le tableau par défaut (comme null , false , chaînes vides, etc.). S'il y a des valeurs nulles dans le tableau, cela peut faire en sorte que le résultat de filtrage soit pire que prévu.

Exemple de question:

 $arr = [0, 1, 2, null, false, "", 3];
$result = array_filter($arr);
print_r($result);  // Il sera filtré ici 0、null、false et des cordes vides

Solution: Si vous souhaitez conserver des valeurs comme 0 ou FALSE , vous pouvez transmettre une fonction de rappel personnalisée ou utiliser l'indicateur Array_Filter_Use_Both pour contrôler comment filtrer.

Code pour la fonction de rappel personnalisée:

 $arr = [0, 1, 2, null, false, "", 3];
$result = array_filter($arr, function($value) {
    return $value !== null;  // réserve null Valeurs autres que
});
print_r($result);

4. Modifier la référence du tableau

array_filter () renvoie un nouveau tableau au lieu de modifier le tableau d'origine. La modification du tableau d'origine nécessite une référence ou d'autres méthodes. Si vous souhaitez manipuler directement le tableau d'origine, vous pouvez utiliser array_walk () ou d'autres fonctions.

Exemple de question:

 $arr = [1, 2, 3, 4, 5];
array_filter($arr, function($value) {
    return $value > 3;
});
print_r($arr);  // Le tableau d'origine n'a pas été modifié

Solution: Si vous souhaitez modifier le tableau d'origine, vous pouvez utiliser Array_Walk () ou réaffecter directement la valeur.

Code corrigé:

 $arr = [1, 2, 3, 4, 5];
$arr = array_filter($arr, function($value) {
    return $value > 3;
});
print_r($arr);  // Retourner directement le tableau modifié

5. paramètres de mauvaise utilisation

Array_Filter () permet au deuxième paramètre de spécifier les critères de filtrage. Par défaut, il utilise une fonction de rappel pour filtrer les éléments. Cependant, si ce paramètre est mal utilisé, il peut également entraîner des problèmes.

Exemple de question:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, 1);  // Utilisé la valeur numérique de manière incorrecte 1
print_r($result);

Solution: assurez-vous que le deuxième paramètre est une fonction de rappel valide.

Code corrigé:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
    return $value % 2 == 0;  // Utilisez correctement les fonctions de rappel
});
print_r($result);