Funzione PHP Array compact
Scopri come la funzione compact() di PHP crea un array associativo dalle variabili esistenti, con sintassi, esempi e problemi comuni spiegati.
Cos'è la funzione PHP compact()?
compact() è una funzione PHP integrata che crea un array associativo a partire da variabili esistenti. Le si passano i nomi delle variabili (come stringhe), e restituisce un array le cui chiavi sono quei nomi e i cui valori sono i valori correnti delle variabili. È l'inverso di extract(), che trasforma un array in variabili singole.
Questa pagina tratta la sintassi, il modo in cui compact() risolve i nomi delle variabili, il passaggio dei nomi come array, cosa succede con i valori null e le variabili non definite, e un caso d'uso pratico comune.
Sintassi
compact(string|array ...$var_names): arrayOgni argomento è una stringa contenente il nome di una variabile, oppure un array di tali stringhe. compact() restituisce l'array associativo risultante.
Come funziona?
compact() cerca nello scope corrente ogni nome che le viene passato. Se esiste una variabile con quel nome, viene aggiunta al risultato (il nome diventa la chiave, il valore della variabile diventa il valore) — anche quando il valore è null. Se non esiste tale variabile, quel nome viene ignorato, e PHP 8.0+ emette un avviso ("Undefined variable").
Ecco il caso più semplice:
Esempio base di compact()
Creiamo tre variabili e passiamo i loro nomi a compact(). L'array risultante ha questo aspetto:
Array (
[name] => John
[age] => 30
[city] => New York
)Nota che si passano i nomi senza il $ iniziale — "name", non $name.
Perché usare compact()?
- Meno ripetizioni: Invece di scrivere
['name' => $name, 'age' => $age, 'city' => $city], si scrivecompact('name', 'age', 'city'). La chiave e il nome della variabile rimangono sincronizzati automaticamente. - Leggibilità: Quando la chiave dell'array e la variabile condividono già un nome,
compact()elimina la ridondanza visiva di duplicare ciascuno. - Meno errori di battitura: Scrivere manualmente coppie chiave-valore rende facile sbagliare a digitare una chiave. Con
compact()la chiave è derivata dal nome della variabile.
Esempi
Includere una variabile con valore null
Qui $state è definita ma contiene null. Poiché la variabile esiste, viene comunque inclusa — il suo valore nell'array è null (che print_r mostra come valore vuoto):
Array (
[name] => John
[age] => 30
[city] => New York
[state] =>
)Un nome che non ha variabili corrispondenti nello scope è un caso diverso: viene ignorato del tutto (e PHP 8.0+ genera un avviso). Quindi compact('name', 'missing') restituisce solo ['name' => 'John'].
Passare i nomi come array
Qualsiasi argomento può essere esso stesso un array di nomi, che compact() appiattisce. Questo è utile quando la lista dei campi viene costruita dinamicamente:
<?php
$name = "John";
$age = 30;
$city = "New York";
$fields = ["name", "age"];
$myArray = compact("city", $fields);
print_r($myArray);
?>Array (
[city] => New York
[name] => John
[age] => 30
)Caso d'uso pratico: passare dati a un template
compact() è molto utile quando si vuole passare a una vista o a un template un insieme di valori con nome senza costruire l'array a mano:
<?php
function renderProfile() {
$username = "jdoe";
$role = "admin";
$isActive = true;
// Pass all three as a tidy associative array
return compact("username", "role", "isActive");
}
print_r(renderProfile());
?>Array (
[username] => jdoe
[role] => admin
[isActive] => 1
)Suggerimenti e problemi comuni
- Passa i nomi delle variabili senza il segno
$:compact("name"), noncompact($name). compact()legge solo lo scope corrente — all'interno di una funzione vede le variabili locali di quella funzione, non quelle globali.- Include le variabili il cui valore è
null, ma ignora i nomi senza variabile corrispondente (avviso in PHP 8.0+). Usaisset()o definisci prima la variabile se hai bisogno che sia presente. - Per fare il contrario — trasformare un array in variabili — usa
extract(). Per ispezionare le variabili esistenti nello scope, vediget_defined_vars().
Funzioni correlate
extract()— l'inverso dicompact(): importa le chiavi di un array come variabili.get_defined_vars()— restituisce tutte le variabili definite nello scope corrente.- Array associativi — il tipo di array prodotto da
compact().