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
// 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
)
*/
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
$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
$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'
El operador + mantiene las
claves del primer array si hay
duplicados.
array_merge() sobrescribe
con los valores del último array.
Eliminar elementos
<?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
$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
$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
$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
// 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
$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
¿Has encontrado un error o tienes una sugerencia para mejorar esta lección?
Escríbenos¿Te está gustando el curso?
Tenemos cursos premium con proyectos reales y soporte personalizado.
Descubrir cursos premium