O Poder do PHP: Entendendo a Função array_fill_keys
Aprenda array_fill_keys() do PHP: crie um array associativo a partir de uma lista de chaves e um valor de preenchimento compartilhado, com exemplos de chaves duplicadas e numéricas.
array_fill_keys() é uma função nativa do PHP que constrói um novo array associativo a partir de uma lista de chaves e um único valor que todas as entradas compartilham. É a maneira mais rápida de pré-inicializar um array quando você já conhece as chaves necessárias, mas quer que todas comecem com o mesmo padrão — por exemplo, zerar um conjunto de contadores, marcar uma lista de itens como false ou criar slots de placeholder para preencher depois.
Esta página aborda o que array_fill_keys() faz, seu comportamento exato com chaves duplicadas e numéricas, como ela difere de array_fill() e array_combine(), e quando usá-la.
Sintaxe
array_fill_keys(array $keys, mixed $value): array| Parâmetro | Descrição |
|---|---|
$keys | Um array de valores a serem usados como chaves do novo array. Cada entrada é usada como chave, não como valor. |
$value | O valor a ser atribuído a cada chave. Pode ser qualquer tipo — um escalar, null, um array ou um object. |
Valor de retorno: um novo array cujas chaves vêm de $keys e cujos valores são todos $value. Disponível desde PHP 5.2.0.
As chaves seguem as regras normais de chaves de array do PHP: apenas inteiros e strings são válidos. Uma string que parece um inteiro decimal (como
"5") é convertida para o inteiro5, e chavestrue/false/nulltornam-se1/0/"".
Exemplo básico
Passe as chaves como primeiro argumento e o valor de preenchimento compartilhado como segundo:
A saída é um array associativo usando suas chaves, cada uma mapeada para o mesmo valor:
Array
(
[a] => value
[b] => value
[c] => value
)Isso é útil sempre que você tem um conjunto de chaves, mas os valores ainda não importam ou devem todos começar iguais — um caso comum é inicializar contadores com 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
)Usando null, arrays ou objects como valor
O valor de preenchimento pode ser de qualquer tipo. Use null para criar slots de placeholder que você preencherá depois:
<?php
$keys = array("id", "status");
$filled = array_fill_keys($keys, null);
print_r($filled);
?>Array
(
[id] =>
[status] =>
)Quando o valor é um array ou object, ele é copiado por valor em cada chave, portanto modificar uma entrada nunca afeta as demais:
<?php
$buckets = array_fill_keys(array("a", "b"), array());
$buckets["a"][] = 1;
print_r($buckets);
?>Array
(
[a] => Array
(
[0] => 1
)
[b] => Array
(
)
)Chaves duplicadas e numéricas
Como o resultado é um array PHP real, as chaves obedecem às regras normais de chaves de array. Chaves duplicadas são consolidadas em uma única entrada, e chaves com string decimal tornam-se inteiros:
<?php
print_r(array_fill_keys(array("5", 5, "name"), null));
?>Array
(
[5] =>
[name] =>
)Aqui "5" e 5 são ambos armazenados como a chave inteira 5, portanto apenas uma entrada 5 permanece. Tenha isso em mente se sua lista de chaves puder conter duplicatas — o array será mais curto que a entrada.
array_fill_keys() vs. funções relacionadas
array_fill()preenche um intervalo de chaves inteiras sequenciais a partir de um deslocamento fornecido, em vez de uma lista explícita de chaves. Use-a quando quiser índices no estilo0, 1, 2, ….array_combine()combina um array de chaves com um array de valores de mesmo comprimento, dando a cada chave um valor diferente. Usearray_fill_keys()quando todos os valores forem iguais.array_keys()faz o inverso: extrai as chaves de um array existente.
Um padrão comum é inicializar os padrões com array_fill_keys() e depois mesclar os dados reais por cima:
<?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
)Isso garante que toda chave esperada esteja presente mesmo quando os dados recebidos forem parciais.
Resumo
array_fill_keys() transforma uma lista de chaves mais um valor compartilhado em um array associativo pronto para uso. Use-a para inicializar contadores, flags ou registros de placeholder em uma única linha. Lembre-se de que o valor de preenchimento é copiado para cada chave e que chaves duplicadas ou com string decimal são consolidadas seguindo as regras padrão de chaves de array do PHP. Para valores diferentes por chave, use array_combine(); para índices inteiros sequenciais, use array_fill(). Veja o guia de arrays PHP para uma visão mais ampla.