El poder de PHP: Comprender la función array_fill_keys
Aprende PHP array_fill_keys(): construye un array asociativo a partir de una lista de claves y un valor compartido, con ejemplos de claves duplicadas y numéricas.
array_fill_keys() es una función integrada de PHP que construye un nuevo array asociativo a partir de una lista de claves y un único valor que comparten todas las entradas. Es la forma más rápida de preinicializar un array cuando ya conoces las claves que necesitas pero quieres que todas comiencen con el mismo valor por defecto — por ejemplo, poner a cero un conjunto de contadores, marcar una lista de elementos como false, o crear ranuras de marcador de posición para rellenar más adelante.
Esta página explica qué hace array_fill_keys(), su comportamiento exacto con claves duplicadas y numéricas, en qué se diferencia de array_fill() y array_combine(), y cuándo utilizarla.
Sintaxis
array_fill_keys(array $keys, mixed $value): array| Parámetro | Descripción |
|---|---|
$keys | Un array de valores que se usarán como claves del nuevo array. Cada entrada se usa como clave, no como valor. |
$value | El valor que se asigna a cada clave. Puede ser de cualquier tipo: un escalar, null, un array o un object. |
Valor de retorno: un nuevo array cuyas claves provienen de $keys y cuyos valores son todos $value. Disponible desde PHP 5.2.0.
Las claves siguen las reglas normales de claves de array en PHP: solo son válidos los enteros y las cadenas. Una string que parezca un entero decimal (como
"5") se convierte al entero5, y las clavestrue/false/nullse convierten en1/0/"".
Ejemplo básico
Pasa las claves como primer argumento y el valor de relleno compartido como segundo:
El resultado es un array asociativo que usa tus claves, cada una mapeada al mismo valor:
Array
(
[a] => value
[b] => value
[c] => value
)Esto es útil siempre que tengas un conjunto de claves pero los valores aún no importan o deben empezar todos igual — un caso habitual es inicializar contadores a 0:
<?php
$letters = array("a", "b", "c");
$counts = array_fill_keys($letters, 0);
$counts["a"]++;
$counts["a"]++;
$counts["c"]++;
print_r($counts);
?>Array
(
[a] => 2
[b] => 0
[c] => 1
)Usar null, arrays u objects como valor
El valor de relleno puede ser de cualquier tipo. Usa null para crear ranuras de marcador de posición que rellenarás más adelante:
<?php
$keys = array("id", "status");
$filled = array_fill_keys($keys, null);
print_r($filled);
?>Array
(
[id] =>
[status] =>
)Cuando el valor es un array u object, se copia por valor en cada clave, por lo que modificar una entrada nunca afecta a las demás:
<?php
$buckets = array_fill_keys(array("a", "b"), array());
$buckets["a"][] = 1;
print_r($buckets);
?>Array
(
[a] => Array
(
[0] => 1
)
[b] => Array
(
)
)Claves duplicadas y numéricas
Dado que el resultado es un array PHP real, las claves obedecen las reglas normales de claves de array. Las claves duplicadas se fusionan en una sola entrada, y las claves de string decimal se convierten en enteros:
<?php
print_r(array_fill_keys(array("5", 5, "name"), null));
?>Array
(
[5] =>
[name] =>
)Aquí "5" y 5 se almacenan ambos como la clave entera 5, por lo que solo queda una entrada 5. Ten esto en cuenta si tu lista de claves puede contener duplicados — el array será más corto que la entrada.
array_fill_keys() vs. funciones relacionadas
array_fill()rellena un rango de claves enteras secuenciales a partir de un desplazamiento dado, en lugar de una lista de claves explícita. Úsala cuando quieras índices del estilo0, 1, 2, ….array_combine()empareja un array de claves con un array de valores de igual longitud, dando a cada clave un valor diferente. Usaarray_fill_keys()cuando todos los valores sean iguales.array_keys()hace lo contrario: extrae las claves de un array existente.
Un patrón habitual es inicializar valores por defecto con array_fill_keys() y luego combinar los datos reales encima:
<?php
$defaults = array_fill_keys(array("name", "email", "active"), null);
$input = array("name" => "Ann", "active" => true);
print_r(array_merge($defaults, $input));
?>Array
(
[name] => Ann
[email] =>
[active] => 1
)Esto garantiza que todas las claves esperadas estén presentes incluso cuando los datos de entrada son parciales.
Resumen
array_fill_keys() convierte una lista de claves más un valor compartido en un array asociativo listo para usar. Úsala para inicializar contadores, indicadores o registros de marcador de posición en una sola línea. Recuerda que el valor de relleno se copia en cada clave, y que las claves duplicadas o de string decimal se fusionan siguiendo las reglas estándar de claves de array en PHP. Para valores distintos por clave usa array_combine(); para índices enteros secuenciales usa array_fill(). Consulta la guía de arrays de PHP para obtener una visión más amplia.