W3docs

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ètreDescription
$needleLa valeur à rechercher.
$haystackLe tableau dans lequel effectuer la recherche.
$strictLorsque 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" :

php— editable, runs on the server

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 types

Ici, "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"]) retournait true parce que "foo" était converti en 0. À partir de PHP 8, le même appel retourne false. 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() ou isset()
  • 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 utilisez isset(), qui est plus rapide que la recherche avec in_array().

Résumé

  • in_array($needle, $haystack) retourne true/false selon 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 true comme 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é, et array_key_exists()/isset() lorsque vous vérifiez des clés.

Pratique

Pratique
Quel est le rôle de la fonction 'in_array' en PHP ?
Quel est le rôle de la fonction 'in_array' en PHP ?
Was this page helpful?