W3docs

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âmetroDescrição
$keysUm array de valores a serem usados como chaves do novo array. Cada entrada é usada como chave, não como valor.
$valueO 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 inteiro 5, e chaves true/false/null tornam-se 1/0/"".

Exemplo básico

Passe as chaves como primeiro argumento e o valor de preenchimento compartilhado como segundo:

php— editable, runs on the server

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 estilo 0, 1, 2, ….
  • array_combine() combina um array de chaves com um array de valores de mesmo comprimento, dando a cada chave um valor diferente. Use array_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.

Prática

Prática
Qual é o objetivo da função array_fill_keys() no PHP?
Qual é o objetivo da função array_fill_keys() no PHP?
Was this page helpful?