W3docs

Capire la funzione PHP array_column()

La funzione PHP array_column() estrae valori da array multidimensionali e li restituisce come nuovo array piatto. Scopri sintassi, parametri e casi d'uso.

La funzione PHP array_column() estrae i valori di una singola colonna da un array multidimensionale (o da un array di object) e li restituisce come nuovo array piatto. È una delle funzioni per array più utili quando si lavora con dati provenienti da un database, un file CSV o un'API JSON sotto forma di elenco di record, perché permette di estrarre esattamente il campo desiderato in un'unica riga — senza scrivere un ciclo foreach.

Questo capitolo tratta la sintassi della funzione, il funzionamento del parametro opzionale index_key per reindicizzare il risultato, il comportamento con array di object e chiavi mancanti, i casi d'uso più comuni e le insidie da tenere a mente. Per un contesto più ampio, consulta PHP Arrays e Multidimensional Arrays.

Cos'è la funzione array_column()?

La funzione array_column() è una funzione PHP nativa utilizzata per estrarre valori da un array e restituirli come nuovo array. Richiede due parametri obbligatori: l'array da cui estrarre i valori e la chiave (o colonna) da estrarre. La funzione restituisce un nuovo array contenente solo i valori della colonna specificata.

Ecco la sintassi di base della funzione array_column():

Sintassi della funzione PHP array_column

array_column(array, column_key, [index_key]);
  • array: L'array da cui estrarre i valori.
  • column_key: La chiave (o colonna) da estrarre.
  • index_key (opzionale): La chiave il cui valore viene usato come indice (chiave) dell'array restituito. Passa null per column_key (da PHP 7.0) per restituire intere righe reindicizzate tramite index_key.

La funzione restituisce un array completamente nuovo; non modifica mai l'originale. Funziona su array i cui elementi sono a loro volta array oppure object con proprietà pubbliche.

Come usare la funzione array_column()

Usare la funzione array_column() è molto semplice. Basta passare un array e la chiave da estrarre. Ecco un esempio che mostra come utilizzare array_column():

Esempio PHP della funzione array_column

<?php

$data = [
    [
        'id' => 1,
        'name' => 'John',
        'age' => 30,
    ],
    [
        'id' => 2,
        'name' => 'Jane',
        'age' => 25,
    ],
    [
        'id' => 3,
        'name' => 'Jim',
        'age' => 35,
    ],
];

$names = array_column($data, 'name');

print_r($names);

?>

L'output di questo codice sarà:

Array
(
  [0] => John
  [1] => Jane
  [2] => Jim
)

In questo esempio, la funzione array_column() ha estratto i valori dalla colonna name e li ha restituiti come nuovo array con indice numerico.

Utilizzo del parametro index_key

Il parametro index_key consente di specificare una chiave da usare come indice dell'array restituito. Ecco un esempio che mostra come utilizzare il parametro index_key:

Esempio della funzione PHP array_column con più argomenti

<?php

$data = [
    [
        'id' => 1,
        'name' => 'John',
        'age' => 30,
    ],
    [
        'id' => 2,
        'name' => 'Jane',
        'age' => 25,
    ],
    [
        'id' => 3,
        'name' => 'Jim',
        'age' => 35,
    ],
];

$names = array_column($data, 'name', 'id');

print_r($names);

?>

L'output di questo codice sarà:

Array
(
  [1] => John
  [2] => Jane
  [3] => Jim
)

In questo esempio, array_column() ha estratto i valori dalla colonna name e ha usato la colonna id come chiave di ogni voce nell'array restituito. Questo è il modo più rapido per costruire una tabella di lookup indicizzata per ID.

Restituire intere righe con column_key null

Da PHP 7.0 è possibile passare null come column_key. La funzione mantiene allora ogni riga intera ma reindicizza il risultato tramite index_key. Ciò è utile quando si vuole una mappa record-per-ID anziché un singolo campo:

<?php

$data = [
    ['id' => 1, 'name' => 'John', 'age' => 30],
    ['id' => 2, 'name' => 'Jane', 'age' => 25],
];

$byId = array_column($data, null, 'id');

print_r($byId);

?>
Result

Lavorare con array di object

array_column() legge anche le proprietà pubbliche degli object, quindi può essere usata su un elenco di istanze di modelli esattamente come con gli array:

<?php

class User {
    public function __construct(public int $id, public string $name) {}
}

$users = [
    new User(1, 'John'),
    new User(2, 'Jane'),
];

print_r(array_column($users, 'name', 'id'));

?>
Result

Insidie da tenere a mente

  • Le chiavi mancanti vengono ignorate silenziosamente. Se una riga non contiene column_key, quella riga viene semplicemente omessa dal risultato — non viene generato alcun avviso. Allo stesso modo, una riga priva di index_key torna a una chiave numerica sequenziale.
  • I valori duplicati di index_key si sovrascrivono a vicenda. Poiché le chiavi devono essere univoche, se due righe condividono lo stesso index_key, sopravvive solo l'ultima.
  • Vengono lette solo le proprietà pubbliche degli object. Le proprietà protette e private vengono ignorate a meno che la classe non implementi accessor magici.

Casi d'uso di array_column()

La funzione array_column() può essere utilizzata in diverse situazioni in cui è necessario estrarre valori da array e restituirli come nuovo array. Ecco alcuni casi d'uso comuni:

  • Estrarre valori da array multidimensionali per creare un elenco semplice
  • Creare un array associativo a partire da un array multidimensionale
  • Trasformare un array multidimensionale in un array monodimensionale da usare in un menu a discesa o in un altro elemento di un modulo

Se è necessario trasformare ogni valore durante l'estrazione, usa array_map(); per mantenere solo le righe che soddisfano una condizione, consulta array_filter().

Conclusione

La funzione array_column() è uno strumento conciso per estrarre una singola colonna da array multidimensionali e da array di object. Con il parametro opzionale index_key è possibile reindicizzare il risultato in un solo passaggio, e con column_key impostato a null si possono costruire mappe di lookup a record interi. Utilizzarla al posto di un ciclo foreach scritto a mano rende il codice di elaborazione dei dati più breve e leggibile.

Pratica

Pratica
Qual è la funzione di array_column() in PHP?
Qual è la funzione di array_column() in PHP?
Was this page helpful?