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 où 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 vautfalse(par défaut), les valeurs sont comparées de manière souple (==), ce qui signifie que0,"0",0.0et mêmefalsepeuvent se correspondre. Lorsqu'il vauttrue, la comparaison est stricte (===) et ne correspond que si le type et la valeur sont identiques. Passez toujourstruelorsque 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.
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 :
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 ?
| Objectif | Meilleure fonction |
|---|---|
| Obtenir la clé du premier élément correspondant | array_search() |
| Vérifier simplement si une valeur existe | in_array() |
| Obtenir toutes les clés pour une valeur | array_keys() |
| Vérifier si une clé existe | array_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.