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. Passanullpercolumn_key(da PHP 7.0) per restituire intere righe reindicizzate tramiteindex_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);
?>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'));
?>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 diindex_keytorna a una chiave numerica sequenziale. - I valori duplicati di
index_keysi sovrascrivono a vicenda. Poiché le chiavi devono essere univoche, se due righe condividono lo stessoindex_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.