Maison >développement back-end >tutoriel php >Pourquoi `in_array()` et `array_search()` de PHP renvoient-ils parfois des résultats inattendus ?

Pourquoi `in_array()` et `array_search()` de PHP renvoient-ils parfois des résultats inattendus ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-24 01:27:11960parcourir

Why Do PHP's `in_array()` and `array_search()` Sometimes Return Unexpected Results?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn