Lección 15 de 75 14 min de lectura

Arrays Asociativos

Los arrays asociativos usan claves con nombre en lugar de índices numéricos. Son ideales para representar estructuras de datos como usuarios, configuraciones o cualquier conjunto de propiedades relacionadas.

Crear arrays asociativos

PHP
<?php

// Array asociativo con datos de usuario
$usuario = [
    'nombre' => 'Carlos',
    'edad' => 28,
    'email' => 'carlos@ejemplo.com',
    'activo' => true
];

// Sintaxis clásica
$config = array(
    'debug' => false,
    'timezone' => 'Europe/Madrid',
    'charset' => 'UTF-8'
);

// Claves pueden ser strings o enteros
$mixto = [
    'nombre' => 'Ana',
    0 => 'valor en índice 0',
    'items' => 5
];

print_r($usuario);
/*
Array
(
    [nombre] => Carlos
    [edad] => 28
    [email] => carlos@ejemplo.com
    [activo] => 1
)
*/
En PHP todo array es asociativo

Técnicamente, todos los arrays en PHP son asociativos. Los "arrays indexados" son simplemente arrays donde las claves son números secuenciales automáticos.

Acceder a valores

PHP
<?php

$usuario = [
    'nombre' => 'Carlos',
    'edad' => 28,
    'email' => 'carlos@ejemplo.com'
];

// Acceso directo por clave
echo $usuario['nombre']; // Carlos
echo $usuario['edad'];   // 28

// Acceder a clave que no existe genera Warning
// echo $usuario['telefono']; // Warning: Undefined array key

// Verificar antes de acceder
if (isset($usuario['telefono'])) {
    echo $usuario['telefono'];
} else {
    echo 'Sin teléfono';
}

// Operador null coalescente (PHP 7+)
$telefono = $usuario['telefono'] ?? 'No especificado';
echo $telefono; // No especificado

// Usar en strings con llaves
echo "Hola, {$usuario['nombre']}\n";

Modificar y añadir elementos

PHP
<?php

$usuario = [
    'nombre' => 'Carlos',
    'edad' => 28
];

// Modificar valor existente
$usuario['edad'] = 29;

// Añadir nueva clave
$usuario['email'] = 'carlos@ejemplo.com';
$usuario['ciudad'] = 'Madrid';

print_r($usuario);
/*
Array
(
    [nombre] => Carlos
    [edad] => 29
    [email] => carlos@ejemplo.com
    [ciudad] => Madrid
)
*/

// Añadir múltiples claves de una vez
$usuario += [
    'pais' => 'España',
    'idioma' => 'Español'
];

// El operador + NO sobrescribe claves existentes
$usuario += ['nombre' => 'Otro']; // 'nombre' sigue siendo 'Carlos'
Diferencia entre + y array_merge

El operador + mantiene las claves del primer array si hay duplicados. array_merge() sobrescribe con los valores del último array.

Eliminar elementos

PHP
<?php

$usuario = [
    'nombre' => 'Carlos',
    'edad' => 28,
    'email' => 'carlos@ejemplo.com',
    'temporal' => 'valor temporal'
];

// Eliminar por clave
unset($usuario['temporal']);

// Verificar que se eliminó
var_dump(isset($usuario['temporal'])); // bool(false)

// Eliminar múltiples claves
unset($usuario['edad'], $usuario['email']);

print_r($usuario);
/*
Array
(
    [nombre] => Carlos
)
*/

Recorrer arrays asociativos

PHP
<?php

$usuario = [
    'nombre' => 'Carlos',
    'edad' => 28,
    'email' => 'carlos@ejemplo.com'
];

// Solo valores
foreach ($usuario as $valor) {
    echo "$valor\n";
}

// Claves y valores (lo más común)
foreach ($usuario as $clave => $valor) {
    echo "$clave: $valor\n";
}
// nombre: Carlos
// edad: 28
// email: carlos@ejemplo.com

// Generar HTML
echo '<ul>';
foreach ($usuario as $campo => $valor) {
    echo "<li><strong>$campo:</strong> $valor</li>";
}
echo '</ul>';

Obtener claves y valores

PHP
<?php

$usuario = [
    'nombre' => 'Carlos',
    'edad' => 28,
    'email' => 'carlos@ejemplo.com'
];

// Obtener todas las claves
$claves = array_keys($usuario);
print_r($claves); // ['nombre', 'edad', 'email']

// Obtener todos los valores
$valores = array_values($usuario);
print_r($valores); // ['Carlos', 28, 'carlos@ejemplo.com']

// Verificar si una clave existe
if (array_key_exists('email', $usuario)) {
    echo 'La clave email existe';
}

// Diferencia entre isset() y array_key_exists()
$datos = ['clave' => null];

var_dump(isset($datos['clave']));           // false (porque es null)
var_dump(array_key_exists('clave', $datos)); // true (la clave existe)

// Verificar si un valor existe
if (in_array('Carlos', $usuario)) {
    echo 'Carlos está en el array';
}

// Buscar clave por valor
$clave = array_search('carlos@ejemplo.com', $usuario);
echo $clave; // email

Combinar arrays

PHP
<?php

$defaults = [
    'theme' => 'dark',
    'language' => 'es',
    'notifications' => true
];

$userPrefs = [
    'theme' => 'light',
    'fontSize' => 16
];

// array_merge: el segundo sobrescribe al primero
$config = array_merge($defaults, $userPrefs);
print_r($config);
/*
Array
(
    [theme] => light        // Sobrescrito
    [language] => es
    [notifications] => 1
    [fontSize] => 16        // Añadido
)
*/

// Spread operator (PHP 7.4+)
$config = [...$defaults, ...$userPrefs];
// Mismo resultado que array_merge

// Crear array combinando claves y valores
$claves = ['a', 'b', 'c'];
$valores = [1, 2, 3];
$combinado = array_combine($claves, $valores);
print_r($combinado); // ['a' => 1, 'b' => 2, 'c' => 3]

Casos de uso comunes

PHP
<?php

// 1. Configuración de aplicación
$config = [
    'app_name' => 'Mi Aplicación',
    'version' => '1.0.0',
    'debug' => true,
    'database' => [
        'host' => 'localhost',
        'name' => 'mi_bd',
        'user' => 'root'
    ]
];

echo $config['app_name'];
echo $config['database']['host'];

// 2. Datos de formulario
$formulario = [
    'nombre' => $_POST['nombre'] ?? '',
    'email' => $_POST['email'] ?? '',
    'mensaje' => $_POST['mensaje'] ?? ''
];

// 3. Respuesta de API
$respuesta = [
    'success' => true,
    'data' => [
        'id' => 123,
        'nombre' => 'Producto'
    ],
    'message' => 'Operación completada'
];

echo json_encode($respuesta);

// 4. Mapeo de valores
$estados = [
    'pendiente' => 'Pendiente de revisión',
    'aprobado' => 'Aprobado',
    'rechazado' => 'Rechazado',
    'completado' => 'Completado'
];

$codigo = 'aprobado';
echo $estados[$codigo]; // Aprobado

// 5. Conteo de ocurrencias
$votos = ['php', 'python', 'php', 'javascript', 'php', 'python'];
$conteo = array_count_values($votos);
print_r($conteo);
/*
Array
(
    [php] => 3
    [python] => 2
    [javascript] => 1
)
*/

Filtrar arrays asociativos

PHP
<?php

$usuario = [
    'nombre' => 'Carlos',
    'edad' => 28,
    'email' => 'carlos@ejemplo.com',
    'password' => 'secreto',
    'token' => 'abc123'
];

// Filtrar solo ciertas claves
$publico = array_intersect_key($usuario, array_flip(['nombre', 'edad', 'email']));
print_r($publico);
/*
Array
(
    [nombre] => Carlos
    [edad] => 28
    [email] => carlos@ejemplo.com
)
*/

// Excluir ciertas claves
$sinSecretos = array_diff_key($usuario, array_flip(['password', 'token']));
print_r($sinSecretos);

// Filtrar por valor con callback
$datos = [
    'a' => 1,
    'b' => null,
    'c' => 3,
    'd' => '',
    'e' => 0
];

// Eliminar valores vacíos (null, '', 0, false)
$filtrado = array_filter($datos);
print_r($filtrado); // ['a' => 1, 'c' => 3]

// Filtrar con callback personalizado
$soloPositivos = array_filter($datos, fn($v) => $v > 0);
print_r($soloPositivos); // ['a' => 1, 'c' => 3]

Ejercicios

Ejercicio 1: Crear un array asociativo

Crea un array asociativo que represente un libro con las claves: 'titulo', 'autor' y 'anio'. Luego imprime cada dato en formato "Clave: valor".

Ver solucion
<?php

declare(strict_types=1);

$libro = [
    'titulo' => 'Don Quijote',
    'autor' => 'Cervantes',
    'anio' => 1605
];

foreach ($libro as $clave => $valor) {
    echo "$clave: $valor\n";
}

Ejercicio 2: Acceso seguro con operador null coalescente

Dado el array $usuario = ['nombre' => 'Ana', 'edad' => 25], intenta acceder a la clave 'email' que no existe. Usa el operador ?? para mostrar "No especificado" si no existe.

Ver solucion
<?php

declare(strict_types=1);

$usuario = ['nombre' => 'Ana', 'edad' => 25];

$email = $usuario['email'] ?? 'No especificado';

echo "Nombre: {$usuario['nombre']}\n";
echo "Email: $email\n";

Ejercicio 3: Combinar arrays con array_merge

Tienes dos arrays: $defaults = ['tema' => 'claro', 'idioma' => 'es'] y $preferencias = ['tema' => 'oscuro']. Combinalos con array_merge para que las preferencias sobrescriban los valores por defecto.

Ver solucion
<?php

declare(strict_types=1);

$defaults = ['tema' => 'claro', 'idioma' => 'es'];
$preferencias = ['tema' => 'oscuro'];

$config = array_merge($defaults, $preferencias);

foreach ($config as $clave => $valor) {
    echo "$clave: $valor\n";
}
// tema: oscuro
// idioma: es

¿Te está gustando el curso?

Tenemos cursos premium con proyectos reales y soporte personalizado.

Descubrir cursos premium