W3docs

PHP Array Search : guide complet

Découvrez comment utiliser array_search() en PHP pour trouver la clé d'une valeur dans un array, avec comparaison stricte et exemples pratiques.

array_search() trouve le premier élément d'un array égal à une valeur donnée et retourne la clé de cet élément. Si rien ne correspond, il retourne false. Utilisez cette fonction lorsque vous avez une valeur et que vous avez besoin de savoir elle se trouve dans l'array — par exemple, l'index à passer à unset(), array_splice(), ou une recherche ultérieure.

Elle fonctionne aussi bien sur les arrays indexés que sur les arrays associatifs, et elle retourne la vraie clé — qui peut être un 0, un entier non séquentiel, ou une string. Cette page couvre la syntaxe, la comparaison souple et stricte, le piège false-vs-0, la recherche de toutes les correspondances (pas seulement la première), et quand préférer in_array() ou array_keys().

Syntaxe

array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false
  • $needle — la valeur que vous recherchez.
  • $haystack — l'array dans lequel effectuer la recherche.
  • $strict — optionnel. Lorsqu'il vaut false (par défaut), les valeurs sont comparées de manière souple (==), ce qui signifie que 0, "0", 0.0 et même false peuvent se correspondre. Lorsqu'il vaut true, la comparaison est stricte (===) et ne correspond que si le type et la valeur sont identiques. Passez toujours true lorsque l'array contient des types mixtes.

La fonction retourne la clé du premier élément correspondant, ou false si la valeur n'est pas présente.

Utilisation de base

Le cas le plus simple : rechercher dans un array indexé et afficher la clé où se trouve la valeur.

php— editable, runs on the server

Ici, 3 se trouve à l'index 2, donc le script affiche Value was found at key: 2. Notez qu'array_search() retourne la clé réelle, pas la position — pour un array réindexé ou associatif, ces deux notions ne sont pas équivalentes.

Recherche dans les arrays associatifs

array_search() est particulièrement utile sur les arrays associatifs, où elle vous retourne une clé string utilisable pour récupérer des données associées :

<?php

$users = [
    "admin"  => "Alice",
    "editor" => "Bob",
    "viewer" => "Cara",
];

$role = array_search("Bob", $users);
echo "Bob's role is: $role"; // editor

?>

Ceci affiche Bob's role is: editor. Si vous avez seulement besoin de savoir si une valeur existe — sans connaître sa clé — préférez in_array(), qui est plus lisible et légèrement plus rapide.

Comparaison stricte et souple

Par défaut, array_search() compare de manière souple (==), ce qui peut produire des correspondances surprenantes lorsque les types diffèrent. Passer true comme troisième argument force une comparaison stricte (===) afin que le type corresponde également :

php— editable, runs on the server

Dans cet exemple, nous avons créé un array appelé $array contenant cinq éléments, dont une valeur string "3". Nous définissons ensuite la valeur à rechercher dans l'array à 3. La fonction array_search() est alors utilisée pour rechercher cette valeur dans l'array, avec le paramètre strict défini à true. Le résultat est stocké dans la variable $result. Enfin, nous utilisons une instruction if pour vérifier si la valeur a été trouvée dans l'array ou non. Si elle a été trouvée, la clé est affichée. Sinon, un message indiquant que la valeur n'a pas été trouvée dans l'array est affiché. Notez qu'array_search() retourne false lorsque la valeur n'est pas trouvée. Comme 0 est une clé valide, vous devez utiliser la comparaison stricte (=== false) pour distinguer correctement un résultat non trouvé d'une clé ayant la valeur 0.

Le piège false vs. 0

L'erreur la plus courante avec array_search() est de mal interpréter sa valeur de retour. Comme un élément trouvé peut légitimement avoir la clé 0, et que « non trouvé » retourne false, une vérification souple comme if (!$result) traite les deux de la même façon. Comparez toujours avec === false :

<?php

$names = ["Alice", "Bob", "Cara"];

// Alice is at key 0 — a real result, but falsy!
$key = array_search("Alice", $names);

if ($key === false) {
    echo "Not found";
} else {
    echo "Found at key: $key"; // Found at key: 0
}

?>

Ceci affiche Found at key: 0. Un simple if (!$key) aurait signalé à tort « Non trouvé ».

Trouver toutes les clés correspondantes

array_search() s'arrête à la première correspondance. Pour obtenir les clés de tous les éléments égaux à une valeur, utilisez array_keys() avec son argument de recherche optionnel :

<?php

$scores = [10, 20, 30, 20, 50];

echo array_search(20, $scores);            // 1  (first match only)
echo "\n";
print_r(array_keys($scores, 20));          // Array ( [0] => 1 [1] => 3 )

?>

array_search() retourne 1, tandis qu'array_keys($scores, 20) retourne tous les index contenant 20 (1 et 3).

Quelle fonction utiliser ?

ObjectifMeilleure fonction
Obtenir la clé du premier élément correspondantarray_search()
Vérifier simplement si une valeur existein_array()
Obtenir toutes les clés pour une valeurarray_keys()
Vérifier si une clé existearray_key_exists()

Résumé

array_search() retourne la clé du premier élément égal à votre valeur, ou false s'il n'existe pas. Retenez l'essentiel : passez strict = true lorsque l'array mélange des types, testez toujours le résultat avec === false, et préférez in_array() ou array_keys() lorsque vous avez besoin d'une réponse oui/non ou de toutes les clés correspondantes.

Pratique

Pratique
Que fait la fonction array_search() en PHP ?
Que fait la fonction array_search() en PHP ?
Was this page helpful?