Si bien la respuesta de Fosco no es incorrecta, hay un caso a considerar con esta: matrices mixtas. Imagina que tengo una matriz como esta:
$a = array(
"nice",
"car" => "fast",
"none"
);
Ahora, PHP permite este tipo de sintaxis, pero tiene un problema: si ejecuto el código de Fosco obtengo lo 0
que me parece incorrecto , pero ¿por qué sucede esto?
Porque cuando se hacen comparaciones entre cadenas y enteros, PHP convierte las cadenas en enteros (y esto es un poco estúpido en mi opinión), entonces cuando array_search()
busca el índice se detiene en el primero porque aparentemente ("car" == 0)
es cierto .
Establecer el array_search()
modo estricto no resolverá el problema porque luego array_search("0", array_keys($a))
devolvería falso incluso si existe un elemento con índice 0.
Entonces, mi solución solo convierte todos los índices de array_keys()
a cadenas y luego los compara correctamente:
echo array_search("car", array_map("strval", array_keys($a)));
Impresiones 1
, lo cual es correcto.
EDITAR:
Como Shaun señaló en el comentario a continuación, lo mismo se aplica al valor del índice, si busca un índice int como este:
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
Siempre obtendrá 0
, lo cual es incorrecto, por lo que la solución sería convertir el índice (si usa una variable) en una cadena como esta:
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));