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.
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);
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);
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);
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é
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);