La guía definitiva de la función array_keys de PHP
Aprende a usar array_keys() en PHP para obtener las claves de un array, buscar por valor y aplicar comparación estricta o laxa.
array_keys() devuelve las claves (los índices) de un array como un nuevo array reindexado numéricamente. Es una de las formas más comunes de inspeccionar la estructura de un array: se recurre a ella cuando te interesa saber qué posiciones tiene un array, en lugar de los valores almacenados en ellas.
Este capítulo explica la sintaxis, el modo opcional de búsqueda por valor, la diferencia entre comparación laxa y estricta, y los patrones cotidianos en los que array_keys() es la herramienta adecuada.
Qué hace array_keys()
Todo array de PHP es un mapa ordenado de pares clave → valor. La clave puede ser un entero (como en un array indexado simple) o una cadena (como en un array asociativo). array_keys() descarta los valores y te devuelve únicamente las claves, en su orden original, renumeradas desde 0:
- Pásale un array y obtienes todas las claves.
- Pásale un valor de búsqueda y obtienes solo las claves cuyo valor coincide con ese valor de búsqueda.
El resultado es siempre un array nuevo, por lo que el original nunca se modifica. Si en cambio quieres los valores, usa array_values(); si solo necesitas saber si una clave específica existe, array_key_exists() es más eficiente.
Sintaxis
array_keys(array $array, mixed $search_value = ?, bool $strict = false): array| Parámetro | Requerido | Descripción |
|---|---|---|
$array | Sí | El array del que se leerán las claves. |
$search_value | No | Si se indica, solo se devuelven las claves cuyo valor sea igual a este. |
$strict | No | Cuando es true, usa comparación estricta (===) para la búsqueda, por lo que los tipos también deben coincidir. Por defecto es false. |
La función siempre devuelve un array; si no hay coincidencias, devuelve un array vacío, nunca false.
Obtener todas las claves de un array
El uso más habitual es extraer todas las claves de un array asociativo:
Salida:
Array
(
[0] => a
[1] => b
[2] => c
)El array $keys resultante contiene las tres claves de cadena "a", "b" y "c", reindexadas desde 0. Los valores (apple, banana, cherry) se descartan — solo quedan las claves.
Buscar las claves de un valor
Pasa un segundo argumento y array_keys() se convierte en una búsqueda: devuelve la clave de cada elemento igual a ese valor. Esta es la principal diferencia con array_search(), que se detiene en la primera coincidencia.
Salida:
Array
(
[0] => 0
[1] => 3
)"apple" aparece en las posiciones 0 y 3, por lo que se devuelven ambas claves. Si el valor no se encuentra en absoluto, se obtiene un array vacío.
Comparación laxa vs. estricta
Por defecto, la búsqueda por valor utiliza comparación laxa (==), por lo que 1, "1" y 1.0 se tratan como iguales. Establece el tercer argumento en true para exigir una coincidencia exacta de tipo y valor (===):
<?php
$values = array("1", 1, "one", 1, "1");
// Loose: matches both strings and integers
print_r(array_keys($values, 1));
// Strict: matches only the integer 1
print_r(array_keys($values, 1, true));
?>Salida:
Array
(
[0] => 0
[1] => 1
[2] => 3
[3] => 4
)
Array
(
[0] => 1
[1] => 3
)La búsqueda laxa coincide con "1", 1, 1 y "1" (claves 0, 1, 3, 4), mientras que la búsqueda estricta solo coincide con los dos enteros 1 (claves 1 y 3). Usa $strict = true cuando tu array mezcle cadenas y números y la distinción sea importante.
Claves de un array multidimensional
array_keys() solo examina el nivel superior — devuelve las claves del array externo y nunca desciende hacia los arrays anidados. Con un array multidimensional obtienes las claves externas:
<?php
$matrix = array(
"row1" => array("a" => 1, "b" => 2),
"row2" => array("c" => 3),
);
print_r(array_keys($matrix));
?>Salida:
Array
(
[0] => row1
[1] => row2
)Para recopilar también las claves internas, recorre el resultado y llama a array_keys() en cada subarray.
Iterar sobre las claves
Un patrón frecuente es recorrer una estructura por sus claves. Como array_keys() proporciona una lista limpia, puedes usarla directamente en un bucle foreach:
<?php
$prices = array("pen" => 1.20, "book" => 5.00, "bag" => 12.50);
foreach (array_keys($prices) as $item) {
echo $item . PHP_EOL;
}
?>Salida:
pen
book
bagEn el código cotidiano, a menudo usarías foreach ($prices as $item => $price) en su lugar — pero array_keys() es útil cuando necesitas la lista de claves como un valor (para pasarla a otro lugar, contarla o comparar las claves de dos arrays).
Casos de uso comunes y advertencias
- Contar claves:
count(array_keys($arr))es lo mismo quecount($arr)— prefierecount($arr)directamente. - Comprobar si existe una clave: no uses
in_array($k, array_keys($arr))— utilizaarray_key_exists()oisset(), que son más rápidos y claros. (Para comprobar un valor, usain_array().) - El resultado siempre está reindexado: las propias claves del array devuelto son
0, 1, 2, …independientemente de las claves originales. - Sin coincidencias devuelve
[]: la forma de búsqueda por valor nunca devuelvefalse, así que compruébalo conempty()ocount(), no con=== false.
Conclusión
array_keys() extrae las claves de un array, opcionalmente filtradas por valor con comparación laxa o estricta. Úsala para listar claves, encontrar todas las posiciones de un valor o pasar una lista de claves a un bucle. Para los valores correspondientes usa array_values(), para comprobar una sola clave usa array_key_exists(), y para encontrar la primera coincidencia de un valor usa array_search().