array_search($value, $array) renvoie la clé du premier élément égal à $value, ou false si aucun élément ne correspond. Comme une clé trouvée peut valoir 0, testez le résultat avec !== false, comme dans if (($key = array_search('pear', $fruits)) !== false).
Si vous n'avez besoin que d'un oui ou d'un non, in_array() le dit directement. array_search() sert quand vous devez savoir où se trouve la valeur, par exemple pour la modifier ou la supprimer.
Le piège 0 ou false
Le bug le plus courant avec array_search() : la valeur est le premier élément, sa clé vaut 0, et if ($key) traite 0 comme faux. Le code dit « non trouvé » pour une valeur qui est bien là. Comparez avec !== false, qui ne correspond qu'à un vrai false.
!= false a le même bug que if ($key), car 0 == false vaut true. Seul l'opérateur strict les distingue.
Recherche stricte
Comme in_array(), array_search() compare avec == sauf si vous passez true en troisième argument. Le mode souple permet à une chaîne de trouver un nombre et à null de trouver 0, ce qui renvoie une clé inattendue.
Trouver toutes les clés d'une valeur
array_search() s'arrête à la première correspondance. array_keys($array, $value) renvoie toutes les clés correspondantes sous forme de tableau ; ajoutez true pour une comparaison stricte. Un résultat vide signifie aucune correspondance, donc pas de confusion entre 0 et false.
Chercher dans un tableau multidimensionnel avec array_column
array_search() ne regarde pas dans les tableaux imbriqués. Pour une liste de lignes, extrayez le champ recherché avec array_column() ; les positions dans cette liste correspondent aux numéros de ligne, donc le résultat est l'index de la ligne.
array_column() renumérote sa sortie depuis 0, donc cela ne s'aligne que si les lignes sont numérotées 0, 1, 2 sans trou. Après unset() ou array_filter(), la numérotation a des trous ; appliquez d'abord array_values() aux lignes ou utilisez la recherche par clé des deux dernières lignes. array_column() détaille la forme avec clé d'index.
Recherche insensible à la casse
array_search() compare les chaînes exactement. Mettez les deux côtés en minuscules pour ignorer la casse. array_map() garde les clés, donc la clé renvoyée est celle du tableau d'origine.
Chercher puis remplacer ou supprimer
La raison habituelle de chercher est d'agir sur l'élément trouvé. Avec la clé en main, affectez-la pour le modifier ou faites unset() pour le supprimer, en vérifiant toujours d'abord !== false : unset($arr[false]) supprime sans prévenir l'élément de clé 0.
Questions fréquentes
Que renvoie array_search si la valeur n'est pas trouvée ?
false. Quand la valeur est trouvée, elle renvoie sa clé, qui peut valoir 0 ou une chaîne vide, donc vérifiez le résultat avec !== false, jamais avec if ($key) ou != false.
Pourquoi mon test array_search échoue-t-il pour le premier élément ?
Le premier élément d'un tableau indexé a la clé 0, et 0 est évalué à faux. if (array_search('a', ['a', 'b'])) prend donc la branche « non trouvé ». Écrivez if (array_search('a', $arr) !== false).
Comment trouver toutes les clés d'une valeur en PHP ?
array_search() s'arrête à la première correspondance. array_keys($array, $value, true) renvoie toutes les clés dont la valeur correspond, sous forme de tableau (vide s'il n'y en a aucune).
Comment chercher dans un tableau multidimensionnel en PHP ?
Extrayez le champ dans une liste à plat et cherchez dedans : $i = array_search('ada@example.com', array_column($users, 'email'));, puis lisez la ligne avec $users[$i]. Cela fonctionne quand les lignes sont numérotées 0, 1, 2 ; sinon, bouclez avec foreach.