W3docs

La potenza di PHP: capire la funzione array_fill_keys

Scopri array_fill_keys() in PHP: costruisci un array associativo da una lista di chiavi e un valore comune, con esempi su duplicati e chiavi numeriche.

array_fill_keys() è una funzione built-in di PHP che costruisce un nuovo array associativo a partire da un elenco di chiavi e da un singolo valore condiviso da ogni voce. È il modo più rapido per pre-popolare un array quando si conoscono già le chiavi necessarie ma si vuole che tutte inizino con lo stesso valore predefinito — ad esempio azzerare un insieme di contatori, contrassegnare un elenco di elementi come false, oppure creare slot segnaposto da riempire in seguito.

Questa pagina illustra cosa fa array_fill_keys(), il suo comportamento esatto con chiavi duplicate e numeriche, come si differenzia da array_fill() e array_combine(), e quando conviene usarla.

Sintassi

array_fill_keys(array $keys, mixed $value): array
ParametroDescrizione
$keysUn array di valori da usare come chiavi del nuovo array. Ogni voce viene usata come chiave, non come valore.
$valueIl valore da assegnare a ogni chiave. Può essere di qualsiasi tipo — uno scalare, null, un array o un object.

Valore restituito: un nuovo array le cui chiavi provengono da $keys e i cui valori sono tutti $value. Disponibile a partire da PHP 5.2.0.

Le chiavi seguono le regole normali degli array PHP: sono validi solo interi e string. Una string che sembra un intero decimale (come "5") viene convertita all'intero 5, e le chiavi true/false/null diventano rispettivamente 1/0/"".

Esempio base

Passa le chiavi come primo argomento e il valore di riempimento condiviso come secondo:

php— editable, runs on the server

L'output è un array associativo che usa le tue chiavi, ciascuna mappata allo stesso valore:

Array
(
    [a] => value
    [b] => value
    [c] => value
)

Questo è comodo ogni volta che si dispone di un insieme di chiavi ma i valori non importano ancora o devono partire tutti uguali — un caso comune è inizializzare i contatori 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
)

Usare null, array o object come valore

Il valore di riempimento può essere di qualsiasi tipo. Usa null per creare slot segnaposto da popolare in seguito:

<?php

$keys = array("id", "status");
$filled = array_fill_keys($keys, null);
print_r($filled);

?>
Array
(
    [id] =>
    [status] =>
)

Quando il valore è un array o un object viene copiato per valore in ogni chiave, quindi modificare una voce non influisce mai sulle altre:

<?php

$buckets = array_fill_keys(array("a", "b"), array());
$buckets["a"][] = 1;
print_r($buckets);

?>
Array
(
    [a] => Array
        (
            [0] => 1
        )

    [b] => Array
        (
        )

)

Chiavi duplicate e numeriche

Poiché il risultato è un vero array PHP, le chiavi rispettano le normali regole degli array. Le chiavi duplicate vengono compresse in una singola voce e le chiavi stringa decimale diventano interi:

<?php

print_r(array_fill_keys(array("5", 5, "name"), null));

?>
Array
(
    [5] =>
    [name] =>
)

Qui "5" e 5 vengono entrambe memorizzate come chiave intera 5, quindi rimane una sola voce 5. Tieni presente questa cosa se la lista di chiavi potrebbe contenere duplicati — l'array risultante sarà più corto dell'input.

array_fill_keys() vs. funzioni correlate

  • array_fill() riempie un intervallo di chiavi intere sequenziali a partire da un offset specificato, anziché da un elenco esplicito di chiavi. Usala quando vuoi indici in stile 0, 1, 2, ….
  • array_combine() abbina un array di chiavi a un array di valori di uguale lunghezza, assegnando un valore diverso a ogni chiave. Usa array_fill_keys() quando tutti i valori sono uguali.
  • array_keys() fa l'inverso: estrae le chiavi da un array esistente.

Un pattern comune consiste nel pre-popolare i valori predefiniti con array_fill_keys() e poi sovrascriverli con i dati reali tramite merge:

<?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
)

Questo garantisce che ogni chiave attesa sia presente anche quando i dati in ingresso sono parziali.

array_fill_keys() trasforma un elenco di chiavi più un valore condiviso in un array associativo pronto all'uso. Usala per inizializzare contatori, flag o record segnaposto in una sola riga. Ricorda che il valore di riempimento viene copiato in ogni chiave e che le chiavi duplicate o stringa decimale vengono compresse secondo le regole standard degli array PHP. Per valori diversi per ogni chiave usa array_combine(); per indici interi sequenziali usa array_fill(). Consulta la guida agli array PHP per una visione d'insieme.

Pratica

Pratica
Qual è lo scopo della funzione array_fill_keys() in PHP?
Qual è lo scopo della funzione array_fill_keys() in PHP?
Was this page helpful?