W3docs

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ámetroRequeridoDescripción
$arrayEl array del que se leerán las claves.
$search_valueNoSi se indica, solo se devuelven las claves cuyo valor sea igual a este.
$strictNoCuando 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:

php— editable, runs on the server

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.

php— editable, runs on the server

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
bag

En 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 que count($arr) — prefiere count($arr) directamente.
  • Comprobar si existe una clave: no uses in_array($k, array_keys($arr)) — utiliza array_key_exists() o isset(), que son más rápidos y claros. (Para comprobar un valor, usa in_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 devuelve false, así que compruébalo con empty() o count(), 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().

Práctica

Práctica
¿Cuál es el rol de la función array_keys() en PHP?
¿Cuál es el rol de la función array_keys() en PHP?
Was this page helpful?