array_column($rows, $column) restituisce il valore di $column da ogni riga di una lista di righe. Trasforma una tabella di record in un array piatto di un solo campo, ciò che ti serve prima di implode, in_array, array_sum o array_search.
Le righe possono arrivare da qualsiasi parte: una risposta JSON decodificata, un file CSV o una query al database che ha restituito un array di array associativi.
Usare la chiave indice per costruire coppie chiave valore
Il terzo argomento indica un campo il cui valore diventa la chiave di ogni risultato. array_column($users, 'name', 'id') è il modo consueto per costruire una tabella da id a nome, per esempio per una lista <select>.
Se due righe hanno lo stesso valore indice, la riga successiva sovrascrive la precedente.
Indicizzare le righe intere per id con null
Passa null come colonna per tenere ogni riga intera, con il campo indice come nuova chiave. Cercare una riga per id diventa così un accesso diretto per chiave invece di un ciclo.
Costruisci l'indice una volta e ogni ricerca successiva è istantanea, il che conta quando cerchi molti id in un ciclo.
Trovare una riga con array_column e array_search
Per trovare quale riga ha un certo valore, cerca nella colonna e usa la posizione che ottieni. Verifica il risultato con !== false, perché una corrispondenza nella prima riga restituisce 0.
Questo presuppone che $users abbia le chiavi 0, 1, 2, perché array_column restituisce una lista. Se l'array è stato filtrato e ha dei buchi, chiama prima array_values($users). La pagina su array_search tratta in dettaglio la trappola false contro 0.
Sommare, contare o fare la media di una colonna
array_column si abbina bene alle funzioni matematiche: estrai il campo, poi sommalo.
Per un valore calcolato da più campi, come quantità per prezzo, lo strumento è array_map, come nell'ultima riga.
array_column con gli oggetti
Con una lista di oggetti, array_column legge le proprietà pubbliche. Le proprietà private e protected per lei non sono visibili.
La seconda chiamata restituisce un array vuoto: password è privata, quindi ogni oggetto viene saltato.
Le righe senza il campo vengono saltate
array_column non inserisce un segnaposto per una riga a cui manca il campo. Il risultato può essere più corto dell'input, quindi le sue posizioni non corrispondono più alle righe.
Il primo risultato ha due numeri di telefono e nessun indizio che Bob non ne avesse. Con il nome come chiave indice vedi di chi è ogni numero, ed è la forma più sicura ogni volta che ad alcune righe potrebbe mancare il campo.
Domande frequenti
Cosa fa array_column in PHP?
Prende una lista di righe (array o oggetti) e restituisce il valore di un campo da ogni riga: array_column($users, 'email') dà un array piatto di email. Le righe che non hanno il campo vengono saltate.
Come creo un array chiave valore dalle righe?
Passa il campo chiave come terzo argomento: array_column($users, 'name', 'id') restituisce [id => name, ...]. Passa null come secondo argomento, array_column($users, null, 'id'), per tenere le righe intere indicizzate per id.
Cosa fa array_column quando a una riga manca il campo?
Salta quella riga, quindi array_column($people, 'phone') può restituire meno valori delle righe presenti e le posizioni non corrispondono più. Aggiungi una chiave indice, array_column($people, 'phone', 'name'), per vedere da quale riga arriva ogni valore.
array_column funziona con gli oggetti?
Sì, con un array di oggetti legge le proprietà pubbliche, e anche le proprietà rese disponibili tramite __get quando la classe definisce __isset. Le proprietà private e protected vengono saltate.