Menu

Array associativi in PHP: coppie chiave valore

Un array associativo PHP salva i valori sotto chiavi a cui dai un nome: $user = ['name' => 'Ada', 'age' => 36]; si legge come $user['name']. Impara ad aggiungere, modificare e rimuovere coppie, scorrere chiavi e valori, ottenere tutte le chiavi o i valori, verificare una chiave e ordinare per chiave o per valore.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Un array associativo memorizza ogni valore sotto una chiave scelta da te, scritta come key => value: $user = ['name' => 'Ada', 'age' => 36];. Leggi un valore con $user['name'], e aggiungine o modificane uno assegnando alla sua chiave: $user['email'] = 'ada@example.com';.

In altri linguaggi la stessa struttura si chiama dizionario, mappa o hash. In PHP è un normale array le cui chiavi sono stringhe invece di 0, 1, 2.

Aggiungere, modificare e rimuovere coppie

Assegnare a una chiave che non esiste la aggiunge in fondo. Assegnare a una chiave che esiste già ne sostituisce il valore e ne mantiene la posizione. unset() rimuove una coppia.

Qui array_push() non aiuta: può solo accodare valori con chiavi numeriche. Per aggiungere più coppie insieme, usa array_merge($stock, $more), dove vincono i nuovi valori, oppure $stock + $more, dove le chiavi esistenti mantengono i loro valori; la pagina su array_merge confronta i due.

Scorrere chiavi e valori

foreach ($array as $key => $value) percorre le coppie nell'ordine in cui sono state aggiunte. Togli $key => quando ti servono solo i valori.

Ottenere tutte le chiavi o tutti i valori

array_keys() restituisce le chiavi come lista semplice e array_values() restituisce i valori, entrambi reindicizzati da 0. Passa a array_keys() un secondo argomento e restituirà solo le chiavi che contengono quel valore: è così che trovi ogni chiave di un valore.

Per una sola chiave, array_search() restituisce la prima corrispondenza, oppure false quando non ce n'è. La pagina su array_search spiega perché devi confrontare quel risultato con !== false.

Verificare se una chiave esiste

isset($arr['key']) è il controllo abituale e il più veloce, ma restituisce false quando la chiave esiste e contiene null. array_key_exists('key', $arr) in quel caso restituisce true. Per leggere con un valore di ripiego, l'operatore ?? fa entrambe le cose insieme.

Ordinare per chiave o per valore

ksort() ordina per chiave e asort() per valore, entrambe tenendo ogni chiave legata al suo valore. krsort() e arsort() ordinano al contrario. Non usare sort() su un array associativo: butta via le chiavi e rinumera da 0.

Tutte queste ordinano sul posto e restituiscono true, quindi $sorted = ksort($arr) ti dà true, non un array. Gli ordinamenti personalizzati usano uasort() e uksort().

Invertire, contare e convertire in JSON

Alcune funzioni di una riga tornano spesso con i dati chiave valore: array_flip() scambia chiavi e valori, array_count_values() conta quante volte compare ogni valore e json_encode() trasforma l'array in un oggetto JSON.

Errore comune: leggere una chiave che non c'è

Leggere una chiave mancante restituisce null, ma il tuo PHP stampa anche un warning:

<?php
$user = ['name' => 'Ada'];
echo $user['phone'];
Warning: Undefined array key "phone" in /var/www/html/index.php on line 3

Dai alla lettura un default con ??, che non genera mai warning, oppure controlla prima con isset() quando il caso mancante richiede un suo ramo.

Dentro una stringa tra virgolette doppie, racchiudi l'accesso tra graffe, "{$user['email']}". Senza, PHP accetta solo la forma senza apici "$user[email]", in cui è facile sbagliare.

Domande frequenti

Come creo un array associativo in PHP?

Scrivi ogni coppia come key => value dentro le parentesi quadre: $prices = ['apple' => 1.2, 'pear' => 0.9];. Leggi un valore con $prices['apple'].

Come ordino un array associativo per chiave in PHP?

Chiama ksort($arr); per l'ordine dalla A alla Z oppure krsort($arr); dalla Z alla A. Entrambe ordinano sul posto, tengono ogni valore con la sua chiave e restituiscono true, non l'array ordinato.

Come scorro un array associativo in PHP?

Usa foreach con entrambe le variabili: foreach ($prices as $fruit => $price) { echo "$fruit: $price\n"; }. Le coppie escono nell'ordine in cui sono state aggiunte.

Come ottengo tutte le chiavi di un array associativo?

array_keys($arr) restituisce le chiavi come array indicizzato, e array_values($arr) restituisce i valori. array_keys($arr, $value) restituisce solo le chiavi il cui valore è uguale a $value.

Un array associativo PHP mantiene l'ordine di inserimento?

Sì. Gli array PHP sono mappe ordinate, quindi foreach, print_r e json_encode vedono le coppie nell'ordine in cui le hai inserite, finché non ordini l'array con ksort(), asort() o una funzione simile.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA