in_array()
Apprenez comment in_array() vérifie l'existence d'une valeur dans un tableau PHP, la comparaison stricte vs souple et les pièges de la coercition de types.
Ce que fait in_array()
in_array() vérifie si une valeur donnée existe quelque part dans un tableau et retourne un booléen : true si la valeur est trouvée, false dans le cas contraire. Elle recherche dans les valeurs du tableau (pas dans ses clés), ce qui en fait la fonction de référence pour des questions comme « cette option est-elle autorisée ? » ou « cet utilisateur a-t-il déjà été ajouté à la liste ? ».
Cette page couvre la signature, la façon dont la comparaison souple ou stricte modifie le résultat, les pièges liés à la coercition de types qui trompent les développeurs, et quand utiliser une autre fonction à la place.
Syntaxe
in_array(mixed $needle, array $haystack, bool $strict = false): bool| Paramètre | Description |
|---|---|
$needle | La valeur à rechercher. |
$haystack | Le tableau dans lequel effectuer la recherche. |
$strict | Lorsque true, les types doivent également correspondre (utilise === au lieu de ==). Vaut false par défaut. |
La fonction retourne true si $needle est trouvé dans $haystack, sinon false.
Exemple de base
<?php
$fruits = ["apple", "banana", "orange"];
if (in_array("banana", $fruits)) {
echo "Found!";
} else {
echo "Not found.";
}
// Output: Found!in_array() est sensible à la casse pour les chaînes de caractères — "Apple" ne correspondrait pas à "apple" :
Comparaison souple vs. stricte
Par défaut, in_array() utilise la comparaison souple (==), ce qui permet à des valeurs de types différents de correspondre. Passez true comme troisième argument pour exiger une correspondance de type exacte (===) :
<?php
$numbers = [1, 2, 3, 4];
// Loose: the string "1" equals the integer 1
var_dump(in_array("1", $numbers)); // bool(true)
// Strict: "1" (string) is not identical to 1 (int)
var_dump(in_array("1", $numbers, true)); // bool(false)Utilisez le mode strict lorsque votre tableau mélange des types, ou lorsque la correspondance avec un mauvais type constituerait une erreur — par exemple, vérifier un identifiant fourni par l'utilisateur par rapport à une liste d'identifiants entiers.
Le piège de la coercition de types
La comparaison souple peut produire des résultats surprenants. Un exemple classique consiste à rechercher une chaîne vide ou 0 dans une liste de chaînes de caractères :
<?php
$values = [0, "", "foo", "bar"];
var_dump(in_array("0", $values)); // bool(true) — "0" == 0
var_dump(in_array("0", $values, true)); // bool(false) — different typesIci, "0" (string) est loosement égal à l'entier 0 déjà présent dans le tableau, donc la recherche souple retourne true. Le mode strict supprime l'ambiguïté.
Remarque : PHP 8 a modifié la façon dont les chaînes et les nombres sont comparés. Avec PHP 7,
in_array(0, ["foo", "bar"])retournaittrueparce que"foo"était converti en0. À partir de PHP 8, le même appel retournefalse. En cas de doute, passez$strict = true.
Obtenir la position plutôt que vrai/faux
in_array() indique uniquement si une valeur existe. Si vous avez également besoin de sa clé, utilisez array_search() — elle retourne la clé en cas de succès et false en cas d'échec :
<?php
$fruits = ["apple", "banana", "orange"];
$key = array_search("banana", $fruits);
var_dump($key); // int(1)Pour vérifier l'existence d'une clé particulière (et non d'une valeur), utilisez plutôt array_key_exists() ou isset().
Quand utiliser une autre fonction
- Besoin de la position de la valeur correspondante ? →
array_search() - Vérification d'une clé plutôt que d'une valeur ? →
array_key_exists()ouisset() - Filtrer un tableau pour ne conserver que les éléments correspondants ? →
array_filter() - Recherche dans un très grand tableau de manière répétée ? Inversez-le en clés avec
array_keys()et utilisezisset(), qui est plus rapide que la recherche avecin_array().
Résumé
in_array($needle, $haystack)retournetrue/falseselon qu'une valeur existe ou non dans un tableau.- Elle recherche dans les valeurs, est sensible à la casse pour les chaînes, et utilise la comparaison souple par défaut.
- Passez
truecomme troisième argument pour une correspondance stricte (tenant compte des types) — à privilégier lorsque les types sont importants. - Utilisez
array_search()lorsque vous avez besoin de la clé, etarray_key_exists()/isset()lorsque vous vérifiez des clés.