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| Parametro | Descrizione |
|---|---|
$keys | Un array di valori da usare come chiavi del nuovo array. Ogni voce viene usata come chiave, non come valore. |
$value | Il 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'intero5, e le chiavitrue/false/nulldiventano rispettivamente1/0/"".
Esempio base
Passa le chiavi come primo argomento e il valore di riempimento condiviso come secondo:
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 stile0, 1, 2, ….array_combine()abbina un array di chiavi a un array di valori di uguale lunghezza, assegnando un valore diverso a ogni chiave. Usaarray_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.
Riepilogo
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.