W3docs

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): array

Ogni 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()

php— editable, runs on the server

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 scrive compact('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

php— editable, runs on the server

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"), non compact($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+). Usa isset() 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, vedi get_defined_vars().

Funzioni correlate

  • extract() — l'inverso di compact(): 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().

Pratica

Pratica
Qual è il ruolo della funzione 'compact()' in PHP?
Qual è il ruolo della funzione 'compact()' in PHP?
Was this page helpful?