PHP – Gli Array

26 Set

Out Of Date Warning

Questo post è stato pubblicato più di 2 anni fa (il 26 settembre 2011). Le idee vanno avanti velocemente, le prospettive cambiano quindi i contenuti potrebbero non essere aggiornati. Ti prego di tenere in considerazione questo, e di verificare le informazioni tecniche presenti nell'articolo prima di farne affidamento per i tuoi scopi.

A differenza di stringhe e numeri (che sono variabili scalari, nel senso che possono memorizzare un solo valore alla volta), un array può contenere più, pezzi separati di informazioni.
Un array è quindi come un elenco di valori, di cui ogni valore è una stringa, un numero o anche un altro array.
Gli array sono strutturati come una serie di coppie chiave-valore, dove ogni coppia è un elemento della matrice. Per ogni elemento della lista, c’è una chiave (o indice) ad esso associato.

PHP supporta due tipi di array: indicizzati, che utilizzano numeri come chiavi, ed associativi, che utilizzano le stringhe come chiavi.
Come nella maggior parte dei linguaggi di programmazione, con gli array indicizzati, la matrice avrà inizio con il primo indice a 0, a meno che non si specifichino le chiavi in modo esplicito.

Array Indicizzato
Chiave Valore
0 Marco
1 Matteo
2 Luca
3 Giovanni
Array Associativo
Chiave Valore
Pa Palermo
Mi Milano
To Torino
Fi Firenze

Un array segue le stesse regole di denominazione di qualsiasi altra variabile. Una variabile $var potrebbe essere un array, una stringa o un numero, non c’è nessuna differenza.
La differenza sta invece nell’accesso alla matrice.
Per fare riferimento a un valore specifico in un array, dobbiamo iniziare con il nome della variabile, seguito dalle parentesi quadre ([]) che conterranno la chiave del valore che vogliamo leggere:

Attenzione a stampare un array, visto che usano una sintassi diversa dalle variabili normali la stampa può essere più difficoltosa. Se la matrice contiene una chiave stringa, questa potrebbe causare confusione nella sintassi di stampa, in questo caso dobbiamo racchiudere l’array tra parentesi graffe ({}), un esempio chiarisce il concetto:

Creare un Array

Ci sono due modi principali per definire una matrice. In primo luogo, si potrebbe aggiungere un elemento alla volta, per costruirne uno:

Ora $nomi[0] vale Marco, $nomi[1] vale Matteo, $nomi[2] vale Luca.
In alternativa, è possibile specificare la chiave quando si aggiunge un elemento. Ma è importante capire che se si specifica una chiave esistente, il nuovo valore sovrascriverà quella esistente.

Invece di aggiungere un elemento alla volta possiamo costruire un array in un colpo solo attraverso la funzione array()

La funziona array() può essere anche usata per inizializzare un array prima di assegnarvi i valori. In PHP non è richiesto inizializzare una matrice o una variabile, tuttavia a volte può servire per rendere il codice più chiaro ed evitare errori.

Accesso agli Array

Abbiamo già visto come possiamo accedere ad un elemento per volta di un array, utilizzando le sue chiavi. Ma nel caso non conoscessimo le chiavi?
Per accedere ad ogni elemento della matrice il metodo giusto è utilizzare il ciclo foreach. Possiamo usare il ciclo for, ma questo non ci consentirà di ciclare tra gli elementi di un array di tipo associativo.
Con il seguente esempio iteriamo tra gli elementi di un array assegnando il loro valore alla variabile $valore:

Con quest’altro esempio invece otteniamo anche il valore della chiave assegnandolo alla variabile $chiave:

Array multidimensionali

Come detto all’inizio, i valori di un elemento di una matrice possono essere stringhe, numeri ma anche altri array. Quest’ultima opzione di matrice costituita da altre matrici crea un array multidimensionale.
Questo tipo di array sono molto più comuni di quanto si possa pensare, vediamo dunque come ci dobbiamo comportare.
Iniziamo creando un array multidimensionale:

Ora $anno è un array multidimensionale con una chiave stringa. Per accedere al sub-array giorni usiamo echo $anno['giorni'], per accedere al mese ‘Mar‘ usiamo echo $anno['mesi'][3];.
Nell’esempio precedente avevamo anche creato un array ($user) in un unico passaggio. Lo possiamo usare tranquillamente ma secondo me (soprattutto nel caso di sub-array piuttosto grandi) il codice diviene piuttosto complicato da leggere oltre che brutto.

Vediamo ora come possiamo iterare su gli elementi di un array multidimensionale attraverso il foreach. Un esempio vale più di molte parole:

Ordinare un Array

PHP ci fornisce diversi funzioni che ci permettono di ordinare un array in modo molto semplice ed immediato.
Possiamo distinguere tra tre tipi di ordinamento. Innanzitutto, è possibile ordinare un array per valore, usando la funzione sort().
E ‘importante capire che le chiavi della matrice saranno resettate dopo il processo di ordinamento, quindi se il rapporto chiave-valore è importante, non si deve usare questa funzione.
In secondo luogo, è possibile ordinare un array in base al valore, pur mantenendo le chiavi, utilizzando asort(). In terzo luogo, è possibile ordinare un array per chiave, utilizzando ksort().
Possiamo anche invertire l’ordine se si utilizza rispettivamente: rsort(), arsort() e krsort(). Attraverso la funzione shuffle() possiamo randomizzare gli elementi di un array. Anche in questo caso le chiavi saranno resettate.
Infine la funzione PHP natsort() può essere utilizzata per ordinare le matrici in un ordine più naturale rispetto a sort() (essenzialmente trattando meglio i numeri in stringhe), un esempio rende meglio l’idea:

Funzioni utili

Oltre alla possibilità di ordinare gli array PHP ci offre molte altre funzioni utili per lavorare con questi, vediamone alcune delle più utilizzate iniziando da explode() ed implode() che ci permettono di passare da una stringa ad un array e viceversa:

La funzione range() ci permette di creare un array contenente un range di elementi, possiamo creare arrays numerici ed alfabetici per esempio:

Con la funzione is_array() possiamo controllare se una variabile è di tipo array, mentre con count() possiamo ottenere il numero di elementi di un array.
La funzione list() è un modo per assegnare gli elementi di un array (i valori) a diverse variabili in una sola operazione.
Alla prima variabile dell’elenco viene assegnato il valore dell’elemento corrispondente alla posizione 0, alla seconda la posizione 1 e così via.

Questa è solo una parte delle funzioni che PHP ci offre per lavorare con gli array, un elenco completo lo potete trovare a questo indirizzo: it.php.net/manual/en/ref.array.php

Tips

Gli array multidimensionali possono anche provenire da un modulo HTML. Ad esempio, se un modulo ha una serie di checkbox con lo stesso nome, tipo:

La variabile $ _POST nella pagina PHP ricevente sarà multidimensionale. $ _POST['linguaggio'] sarà un array, con $ _POST['linguaggio'][0] contenente il valore della prima casella di controllo (html), $ _POST['linguaggio'][1] che contiene il secondo (css), e così via.
Da notare che sole le checkbox ceccate saranno passate alla pagina PHP.

Lo stesso discorso vale per un elemento select che consente scelte multiple. 😉

4 Commenti su “PHP – Gli Array”

  1. schwinn elliptical machine reviews 13 ottobre 2011 at 07:08 #

    Questa è l’informazione esatta che sto cercando , grazie! Arron

  2. Gaetano 13 ottobre 2013 at 11:04 #

    E’ un articolo ben fatto a me ha interessato in particolar modo l’ultima parte ,quella del TIPS.

  3. Valerio 28 febbraio 2014 at 10:31 #

    Ciao, articolo ben fatto innanzitutto. Mi sto imbattendo in un problema simile.
    Volendo che l’array invece che indicizzato fosse associativo, come sarebbe possibile gestirlo ?

    • grimax 28 febbraio 2014 at 10:55 #

      Ciao Valerio, cosa intendi per “gestirlo”? nell’articolo e spiegato. Comunque

      //Crazione
      $ar = array();
      $ar[‘foo’] = ‘Pippo’;
      $ar[‘baz’] = ‘Bar’;

      //eliminazione elemento
      unset($ar[‘foo’]);

      //Accesso
      echo $ar[‘foo’]; //pippo

      //Ciclo
      //solo valori
      foreach($ar as $value){
      echo “$value
      “;
      }

      //valori e chiavi
      foreach($ar as $key => $value){
      echo “$key = $value
      “;
      }

Lascia un commento