Menu

Arrays asociativos en PHP: pares clave valor

Un array asociativo en PHP guarda valores bajo claves con nombre: $user = ['name' => 'Ada', 'age' => 36]; se lee como $user['name']. Aprende a añadir, cambiar y eliminar pares, recorrer claves y valores, obtener todas las claves o valores, comprobar una clave y ordenar por clave o por valor.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Un array asociativo guarda cada valor bajo una clave que eliges tú, escrita como key => value: $user = ['name' => 'Ada', 'age' => 36];. Lee un valor con $user['name'], y añade o cambia uno asignándolo a su clave: $user['email'] = 'ada@example.com';.

En otros lenguajes la misma estructura se llama diccionario, mapa o hash. En PHP es un array normal cuyas claves son cadenas en lugar de 0, 1, 2.

Añadir, cambiar y eliminar pares

Asignar a una clave que no existe la añade al final. Asignar a una clave que ya existe sustituye su valor y mantiene su posición. unset() elimina un par.

array_push() no sirve aquí: solo puede añadir valores con claves numéricas. Para añadir varios pares a la vez, usa array_merge($stock, $more), donde ganan los valores nuevos, o $stock + $more, donde las claves existentes conservan sus valores; la página de array_merge compara las dos.

Recorrer claves y valores

foreach ($array as $key => $value) recorre los pares en el orden en que se añadieron. Omite $key => cuando solo necesites los valores.

Obtener todas las claves o todos los valores

array_keys() devuelve las claves como una lista simple y array_values() devuelve los valores, ambos reindexados desde 0. Dale a array_keys() un segundo argumento y devuelve solo las claves que contienen ese valor, que es como encuentras todas las claves de un valor.

Para una sola clave, array_search() devuelve la primera coincidencia, o false si no hay ninguna. La página de array_search explica por qué debes comparar ese resultado con !== false.

Comprobar si existe una clave

isset($arr['key']) es la comprobación habitual y la más rápida, pero devuelve false cuando la clave existe y contiene null. array_key_exists('key', $arr) devuelve true en ese caso. Para leer con un valor por defecto, el operador ?? hace las dos cosas a la vez.

Ordenar por clave o por valor

ksort() ordena por clave y asort() por valor, y las dos mantienen cada clave unida a su valor. krsort() y arsort() ordenan al revés. No uses sort() con un array asociativo: descarta las claves y renumera desde 0.

Todas ordenan en el sitio y devuelven true, así que $sorted = ksort($arr) te da true, no un array. Los órdenes personalizados usan uasort() y uksort().

Invertir, contar y convertir a JSON

Con datos clave valor aparecen una y otra vez unas cuantas funciones de una línea: array_flip() intercambia claves y valores, array_count_values() cuenta cuántas veces aparece cada valor y json_encode() convierte el array en un objeto JSON.

Error frecuente: leer una clave que no existe

Leer una clave que falta devuelve null, pero tu PHP además imprime un warning:

<?php
$user = ['name' => 'Ada'];
echo $user['phone'];
Warning: Undefined array key "phone" in /var/www/html/index.php on line 3

Dale a la lectura un valor por defecto con ??, que nunca avisa, o comprueba antes con isset() cuando el caso de la clave ausente necesite su propia rama.

Dentro de una cadena entre comillas dobles, envuelve la búsqueda entre llaves, "{$user['email']}". Sin ellas, PHP solo acepta la forma sin comillas "$user[email]", en la que es fácil equivocarse.

Preguntas frecuentes

¿Cómo creo un array asociativo en PHP?

Escribe cada par como key => value dentro de corchetes: $prices = ['apple' => 1.2, 'pear' => 0.9];. Lee un valor con $prices['apple'].

¿Cómo ordeno un array asociativo por clave en PHP?

Llama a ksort($arr); para ordenar de la A a la Z o a krsort($arr); para ordenar de la Z a la A. Las dos ordenan en el sitio, mantienen cada valor con su clave y devuelven true, no el array ordenado.

¿Cómo recorro un array asociativo en PHP?

Usa foreach con las dos variables: foreach ($prices as $fruit => $price) { echo "$fruit: $price\n"; }. Los pares salen en el orden en que se añadieron.

¿Cómo obtengo todas las claves de un array asociativo?

array_keys($arr) devuelve las claves como un array indexado, y array_values($arr) devuelve los valores. array_keys($arr, $value) devuelve solo las claves cuyo valor es igual a $value.

¿Un array asociativo de PHP conserva el orden de inserción?

Sí. Los arrays de PHP son mapas ordenados, así que foreach, print_r y json_encode ven los pares en el orden en que los insertaste, hasta que ordenas el array con ksort(), asort() o una función similar.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR