Bien que la réponse de Fosco ne soit pas fausse, il y a un cas à considérer avec celui-ci: les tableaux mixtes. Imaginez que j'ai un tableau comme celui-ci:
$a = array(
"nice",
"car" => "fast",
"none"
);
Maintenant, PHP permet ce genre de syntaxe mais il a un problème: si j'exécute le code de Fosco, j'obtiens 0
ce qui est faux pour moi, mais pourquoi cela se produit?
Parce que lorsque vous faites des comparaisons entre des chaînes et des entiers, PHP convertit les chaînes en entiers (et c'est un peu stupide à mon avis), donc lorsque vous array_search()
recherchez l'index, il s'arrête au premier parce qu'apparemment, ("car" == 0)
c'est vrai .
Le réglage array_search()
en mode strict ne résoudra pas le problème car array_search("0", array_keys($a))
cela renverrait false même si un élément d'index 0 existe.
Donc, ma solution convertit simplement tous les index de array_keys()
en chaînes, puis les compare correctement:
echo array_search("car", array_map("strval", array_keys($a)));
Imprime 1
, ce qui est correct.
EDIT:
Comme Shaun l'a souligné dans le commentaire ci-dessous, la même chose s'applique à la valeur d'index, si vous recherchez un index int comme celui-ci:
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
Vous obtiendrez toujours 0
, ce qui est faux, donc la solution serait de convertir l'index (si vous utilisez une variable) en une chaîne comme celle-ci:
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));