Fonctions in_array() et array_search() de PHP : résoudre les comportements étranges
Les fonctions PHP in_array() et array_search() présentent un comportement particulier lorsqu'il est utilisé pour vérifier les valeurs dans un tableau. Ce problème déroutant se pose lorsque le tableau contient des éléments de types différents.
Exemple :
$arr = [TRUE, "some string", "something else"]; $result = in_array("test", $arr); var_dump($result); // Output: bool(true) $result = array_search("test", $arr); var_dump($result); // Output: int(0)
Surprenant, n'est-ce pas ? Les deux fonctions renvoient true, indiquant que « test » est dans le tableau, même si ce n'est clairement pas le cas. Ce comportement découle du mécanisme de comparaison par défaut utilisé par ces fonctions.
Comparaison stricte ou lâche :
Par défaut, in_array() et array_search() utilisent une comparaison lâche (==), qui est évalué comme vrai même si les types de valeurs comparées sont différents. Dans notre exemple, l'élément TRUE du tableau est automatiquement converti en chaîne, ce qui donne TRUE == "test" évalué à true.
Solution : application d'une comparaison stricte
Pour éviter ce comportement inattendu, il est nécessaire de spécifier une comparaison stricte (===) en définissant le troisième paramètre facultatif de ces fonctions sur true. Cela oblige les fonctions à vérifier à la fois la valeur et le type des éléments lors de la comparaison, garantissant ainsi un résultat plus précis.
$result = in_array("test", $arr, true); var_dump($result); // Output: bool(false) $result = array_search("test", $arr, true); var_dump($result); // Output: int(-1)
Dans cet exemple révisé, les résultats corrects sont obtenus, car les fonctions sont chargées de utiliser une comparaison stricte. "test" n'est pas trouvé dans le tableau, et les valeurs renvoyées le reflètent.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!