Embora a resposta de Fosco não esteja errada, há um caso a ser considerado com este: matrizes mistas. Imagine que eu tenho uma matriz como esta:
$a = array(
"nice",
"car" => "fast",
"none"
);
Agora, o PHP permite esse tipo de sintaxe, mas há um problema: se eu executo o código do Fosco, entendo o 0
que está errado para mim, mas por que isso acontece?
Porque, ao fazer comparações entre seqüências de caracteres e números inteiros, o PHP converte as seqüências em números inteiros (e isso é meio estúpido na minha opinião), então, quando array_search()
o índice é pesquisado, ele pára no primeiro porque, aparentemente, ("car" == 0)
é verdade .
Definir array_search()
o modo estrito não resolverá o problema, pois array_search("0", array_keys($a))
retornaria false, mesmo que exista um elemento com o índice 0.
Portanto, minha solução apenas converte todos os índices de array_keys()
para strings e os compara corretamente:
echo array_search("car", array_map("strval", array_keys($a)));
Imprime 1
, o que está correto.
EDIT:
Como Shaun apontou no comentário abaixo, o mesmo se aplica ao valor do índice, se você procurar um índice int como este:
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
Você sempre terá 0
, o que está errado, então a solução seria converter o índice (se você usar uma variável) em uma string como esta:
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));