Si bien la respuesta de Fosco no es incorrecta, hay un caso que debe considerarse con este: matrices mixtas. Imagínese que tiene una matriz de esta manera:
$a = array(
"nice",
"car" => "fast",
"none"
);
Ahora, PHP permite este tipo de sintaxis, pero tiene un problema: si me quedo código de Fosco consigo 0
que está mal para mí, pero por qué sucede esto?
Debido al hacer comparaciones entre cadenas y números enteros PHP convierte cadenas en enteros (y esto es un poco estúpido en mi opinión), por lo que cuando array_search()
búsquedas para el índice que se detenga en el primero, porque al parecer ("car" == 0)
es cierto.
Establecer array_search()
en modo estricto no resolverá el problema porque entonces array_search("0", array_keys($a))
devolverá falso incluso si existe un elemento con índice 0.
Así que mi solución justa convierte todos los índices de array_keys()
de cuerdas y luego los compara correctamente:
echo array_search("car", array_map("strval", array_keys($a)));
imprime 1
que es correcta
¿PHP garantiza el orden de una matriz asociativa? –
@KevinBurke No va a reordenarlo a menos que use una función de clasificación. No estoy seguro de qué tipo de garantía está buscando, pero no es como el modelo de JavaScript donde no hay un orden estático para las matrices asociativas. – Fosco
Los índices dados por "array_keys" no necesariamente coincidirán con el índice de la matriz original. Por ejemplo, si ha alterado la matriz mediante el uso de "unset" o una serie de otras funciones, habrá un espacio en el índice de la matriz original, pero array_keys generará una nueva matriz. – SEoF