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
Libérer: 2024-12-24 01:27:11
original
956 Les gens l'ont consulté

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)
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal