Array PHP

Introduzione
Gli "array classici" sono strutture di dati che consentono di raggruppare, sotto un unico nome, un certo numero di elementi, generalmente dello stesso tipo, e di accedere a ciascuno di essi mediante un indice. Gli array in ambiente PHP, sono piuttosto diversi dagli array classici del linguaggio Java o C. In PHP un array è una struttura associativa detta “mappa” in cui ogni valore contenuto è associato ad una chiave. Gli elementi non devono necessariamente essere dello stesso tipo e non è garantita la contiguità degli elementi. Inoltre, gli array PHP sono dinamici, ossia hanno una dimensione (numero di elementi contenuti) che non deve essere specificata a priori e che può variare durante l'elaborazione. Nella tabella sottostante sono riportate le principali differenze tra array classici e array PHP.

Array classici
Gli elementi sono tutti dello stesso tipo La dimensione è stabilita a priori e non cambia durante l'elaborazione Gli indici sono interi progressivi a partire da 0 o da 1 Gli elementi sono contigui

Array PHP
Gli elementi possono essere di tipo diverso La dimensione può variare dinamicamente Gli indici (chiavi) possono essere interi progressivi o non progressivi o stringhe o addirittura una combinazione di interi e stringhe Gli elementi possono essere non contigui

Semplificando, possiamo allora affermare che PHP supporta due tipi di array: – array scalari; – array associativi. Questa distinzione, in realtà, non esiste in PHP, il quale prevede un unico tipo di array, ma è utile per scopi didattici.

Array scalari
Possiamo immaginare un array scalare, o semplicemente array, come una sequenza di celle, contenenti ognuna un ben determinato valore. Per esempio: $città Torino Genova Roma Napoli Palermo Sassari 0 1 2 3 4 5

è un array contente i nomi di alcune città italiane. I numeri 0, 1, ecc. sono gli indici o le chiavi dell'array. Gli indici di un array iniziano sempre da zero. Il numero di elementi contenuti nell'array, 6 in questo caso, ne indica la dimensione corrente. L'array è identificato da un nome, nel nostro caso $città, mentre ciascun elemento dell'array è accessibile scrivendo il nome dell'array seguito dalla sua posizione (indice), racchiusa tra parentesi quadrate. Nel nostro caso, Torino corrisponde a $città[0], Genova a $città[1] e così via. 1
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

Array associativi
Un array associativo è identico ad un array scalare, eccetto per il fatto che i suoi indici non sono numeri interi ma stringhe. Per esempio: $mesi 31 28 31 gennaio febbraio marzo 30 aprile 31 30 maggio giugno

è un array contenente il numero di giorni di alcuni mesi. L'elemento $mesi["gennaio"] ha valore 31, $mesi["febbraio"] ha valore 28 e così via. Notate che gli indici di un array scalare, essendo stringhe, devono essere scritti tra virgolette.

Creazione di array
Gli array possono essere creati, in PHP, utilizzando due diversi metodi: 1. il costrutto array(); 2. la valorizzazione degli elementi.

Creazione di un array mediante valorizzazione dei suoi elementi

Questo metodo è molto intuitivo e prevede di utilizzare l'operatore di assegnazione per associare ad ogni elemento dell'array l'opportuno valore. Per esempio, la creazione dell'array città può avvenire scrivendo il seguente codice:
<?php $città[0] = "Torino"; $città[1] = "Genova"; $città[2] = "Roma"; $città[3] = "Napoli"; $città[4] = "Palermo"; $città[5] = "Sassari";

?> Un altro modo per creare un array mediante valorizzazione dei suoi elementi, è il seguente:
<?php $città[] = "Torino"; $città[] = "Genova"; $città[] = "Roma"; $città[] = "Napoli"; $città[] = "Palermo"; $città[] = "Sassari";

?> Quando non viene indicato esplicitamente l'indice dell'array, l'interprete PHP lo assegna automaticamente, partendo dal numero 0 e continuando con i successivi numeri naturali. Il risultato è del tutto equivalente a quello ottenuto eseguendo il codice precedente, che comprendeva gli indici.

2
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

Durante l'inizializzazione, è possibile "alterare" l'ordinamento degli indici, ad esempio nel seguente modo:
<?php $a[] = "a"; $a[] = "b"; $a[] = "c"; $a[] = "d"; $a[6] = "e"; $a[4] = "f"; $a[] = "g"; ?>

Il codice crea l'array: $a a 0 b 1 c 2 d 3 f 4 e 6 g 7

Dopo l'assegnazione $a[4] = "f", l'elemento successivo, che non presenta un indice, viene accodato all'array e, pertanto, assume indice 7 (massimo indice intero assegnato +1). L'elemento di indice 5 rimane, invece indefinito. Un analogo discorso vale anche per gli array associativi. L'esempio seguente mostra la creazione dell'array mesi mediante valorizzazione dei suoi elementi:
<?php $mesi["gennaio"] = 31; $mesi["febbraio"] = 28; $mesi["marzo"] = 31; $mesi["aprile"] = 30; $mesi["maggio"] = 31; $mesi["giugno"] = 30; ?>

PHP, come detto in precedenza, consente sia di avere elementi non omogenei (di tipo diverso) all'interno dello stesso array, che indici misti:
<?php $b["rosso"] = "a"; $b[] = "c"; $b[8] = "e"; $b["nero"] = "f"; $b[] ="g"; ?>

Agli indici non specificati viene assegnato 0, se non sono ancora stati utilizzati indici interi, oppure l'intero successivo al massimo indice utilizzato. La struttura ottenuta è pertanto la seguente: $b a rosso c 0 e 8 f nero g 9 3
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

Creazione di un array mediante il costrutto array

Il costrutto array ha la seguente sintassi: id_array = array( chiave => valore,.......); dove id_array è il nome assegnato all'array. La chiave è opzionale. Tale costrutto, se utilizzato senza argomenti id_array = array(); crea un array vuoto. Vediamo alcuni semplici esempi.
<?php $città = array("Torino", "Genova", "Roma", "Napoli", "Palermo", "Sassari"); ?>

Crea l'array (scalare) città, assegnando automaticamente gli indici numerici progressivi, a partire da zero.
<?php $città = array(1 => "Torino", "Genova", "Roma", "Napoli", "Palermo", "Sassari"); ?>

Crea l'array (scalare) città, assegnando automaticamente gli indici numerici progressivi, a partire da 1.
<?php $mesi = array("gennaio" => 31, "febbraio" => 28, "marzo" => 31, "aprile" => 30, "maggio" => 31, "giugno" => 30); ?>

Crea l'array (associativo) mesi. Note – Si possono usare anche TRUE e FALSE come chiavi; essi sono convertiti automaticamente negli interi 1 e 0. – E' anche possibile utilizzare NULL come chiave; in tal caso NULL viene interpretato come stringa vuota. – Se si utilizza una chiave float, questa viene convertita in integer. – Non è possibile utilizzare altri tipi di dati come chiavi.

4
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

Creazione di strutture con array associativi
I linguaggi di programmazione odierni consentono al programmatore di definire tipi di dati strutturati, atti a rappresentare una entità della realtà che si sta studiando. Tali tipi di dati hanno caratteristiche diverse, che variano da linguaggio a linguaggio, ma tutte possono essere ricondotte ad una particolare struttura chiamata record. Un record è una collezione di elementi eterogenei (di tipo diverso) che rappresentano le proprietà di una entità della realtà osservata. Per esempio: studente MAT001235 Belli Mario 1 A matricola cognome nome classe sezione è un record che descrive uno studente. Matricola, cognome, nome classe e sezione sono detti campi del record. Il tipo e il numero di informazioni dipendono dal contesto: ciò significa che in due scuole diverse l'entità astratta studente può essere descritta in maniera diversa. La seconda scuola potrebbe, per esempio, voler memorizzare anche la data di iscrizione. Quando si definisce un record è importante distinguere tra schema o tracciato del record e istanza del record. Lo schema è dato dal numero e dal tipo di campi, che sono gli stessi per ogni studente. L'istanza è un particolare record a cui sono stati assegnati dei valori per ogni campo; ogni istanza è diversa da tutte le altre, pur mantenendo lo stesso schema. Il linguaggio PHP permette di definire strutture del tipo record, utilizzando gli array scalari. Vediamo un esempio:
<?php $studente["matricola"] = "MAT001235"; $studente["cognome"] = "Belli"; $studente["nome"] = "Mario"; $studente["classe"] = 1; $studente["sezione"] = "A"; ?>

Il codice crea un array scalare simile al record studente visto in precedenza. Un risultato analogo si ottiene con il codice seguente:
<?php $studente= array( "matricola" => "MAT001235", "cognome" => "Belli", "nome" => "Mario", "classe" => 1, "sezione" => "A" ) ?>

5
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

Manipolazione di array

Scansione completa di un array scalare

Per accedere agli elementi di un array scalare è possibile utilizzare un ciclo for, con una tecnica molto simile a quella vista con altri linguaggi. Per esempio:
<?php $dimArray = 6; //Inizializzazione dell'array $città = array("Torino","Genova","Roma","Napoli","Palermo","Sassari"); echo "L'array città contiene i seguenti elementi:<br/>"; for ($i=0; $i<$dimArray; $i++) echo "città[".$i."] = ".$città[$i]."<br/>"; ?>

L'output prodotto è il seguente:
L'array città contiene i seguenti elementi: città[0]= Torino città[1]= Genova città[2]= Roma città[3]= Napoli città[4]= Palermo città[5]= Sassari

In PHP la dimensione di un array può variare dinamicamente, pertanto è consigliabile utilizzare la funzione count per ottenere la dimensione corrente dell'array. La funzione count ha come argomento l'array di cui si vuole conoscere la dimensione, count($città), e restituisce il numero di elementi dell'array.
<?php //Inizializzazione dell'array $città = array("Torino","Genova","Roma","Napoli","Palermo","Sassari"); echo "L'array città contiene i seguenti elementi:<br/>"; for ($i=0; $i<count($città); $i++) echo "città[".$i."] = ".$città[$i]."<br/>"; ?>

Osservazione importante Invece di scrivere, nell'Esempio precedente
for ($i=0; $i<count($città); $i++)

si può scrivere
$cnt = count($città); for ($i=0; $i<$cnt; $i++)

In questo modo la funzione count è invocata solo una volta e non count ($città) volte.

6
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

Scansione completa di un array associativo: il costrutto foreach

La scansione completa di un array associativo non può essere eseguita utilizzando il costrutto for, come è evidente; in tale situazione si può utilizzare il costrutto foreach. Il costrutto foreach, implementato a partire dalla versione 4.0 di PHP, è indicato per la gestione degli array e mette a disposizione due sintassi:
foreach (id_array as valore) (1) { istruzioni } foreach (id_array as indice => valore) (2) { istruzioni }

Il costrutto foreach descritto dalla prima sintassi, attraversa l'array id_array e, ad ogni ciclo, assegna il valore dell'elemento corrente a valore. Un puntatore interno avanza automaticamente, di una posizione, ad ogni ciclo, a partire da 0. Vediamo i seguenti esempi.
<?php //Inizializzazione dell'array $città = array("Torino","Genova","Roma","Napoli","Palermo","Sassari"); echo "L'array città contiene i seguenti elementi:<br/>"; foreach ($città as $valore) echo $valore."<br/>"; ?>

L'esempio produce in output:
L'array città contiene i seguenti elementi: Torino Genova Roma Napoli Palermo Sassari

<?php //Inizializzazione dell'array $mesi = array("gennaio" => 31,"febbraio" => 28,"marzo" => 31,"aprile" => 30,"maggio" => 31,"giugno" => 30); echo "L'array mesi contiene i seguenti elementi:<br/>"; foreach ($mesi as $valore) echo $valore."<br/>"; ?>

L'esempio produce in output: 7
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

L'array mesi contiene i seguenti elementi: 31 28 31 30 31 30

Il costrutto foreach descritto dalla seconda sintassi, si comporta in modo analogo al quello della prima sintassi, ma in più assegna il valore della chiave corrente alla variabile indice. Vediamo due esempi.
<?php //Inizializzazione dell'array $città = array("Torino","Genova","Roma","Napoli","Palermo","Sassari"); echo "L'array città contiene i seguenti elementi:<br/>"; foreach ($città as $key => $valore) echo "città[".$key."] = ".$valore."<br/>"; ?>

Produce in output:
L'array città contiene i seguenti elementi: città[0]= Torino città[1]= Genova città[2]= Roma città[3]= Napoli città[4]= Palermo città[5]= Sassari

<?php //Inizializzazione dell'array $mesi = array("gennaio" => 31,"febbraio" => 28,"marzo" => 31,"aprile" => 30,"maggio" => 31,"giugno" => 30); echo "L'array mesi contiene i seguenti elementi:<br/>"; foreach ($mesi as $key => $valore) echo "mesi[".$key."] = ".$valore."<br/>"; ?>

Produce in output:
L'array mesi contiene i seguenti elementi: mesi[gennaio]= 31 mesi[febbraio]= 28 mesi[marzo]= 31 mesi[aprile]= 30 mesi[maggio]= 31 mesi[giugno]= 30

Nota: All'inizio dell'esecuzione di un ciclo foreach il puntatore interno viene automaticamente posizionato nella prima posizione dell’array. 8
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

Visualizzazione di un array

Per visualizzare un array si può utilizzare la funzione print_r. bool print_r ( array id_array , bool return ) Nota: Il parametro return è stato aggiunto in PHP 4.3.0 ed è opzionale. Questa funzione visualizza gli elementi di un array in un formato che evidenzia le chiavi ed i relativi valori. Per esempio:
<?php //Inizializzazione dell'array $mesi = array("gennaio" => 31,"febbraio" => 28,"marzo" => 31,"aprile" => 30,"maggio" => 31,"giugno" => 30); echo "L'array mesi contiene i seguenti elementi:<br/>"; print_r($mesi); ?>

Output prodotto:
L'array mesi contiene i seguenti elementi: Array ( [gennaio] => 31 [febbraio] => 28 [marzo] => 31 [aprile] => 30 [maggio] => 31 [giugno] => 30 )

Se si desidera catturare l'output di print_r, occorre utilizzare il parametro return. Se questo viene impostato a TRUE, print_r restituirà l'output anzichè visualizzarlo (come accade per default). Per esempio, salviamo l'output prodotto dalla funzione nella variabile $result e, successivamente, visualizziamo il contenuto di tale variabile.
<?php //Inizializzazione dell'array $mesi = array("gennaio" => 31,"febbraio" => 28,"marzo" => 31,"aprile" => 30,"maggio" => 31,"giugno" => 30); echo "L'array mesi contiene i seguenti elementi:<br/>"; $result = print_r($mesi,true); echo $result; ?>

L'output prodotto è lo stesso dell'esempio precedente.

9
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

Array bidimensionali
Ogni elemento di un array può essere di tipo qualunque, anche un array. Un array bidimensionale è un array i cui elementi sono a loro volta array. Esempio riga 0 $matrice 0 colonna 0 colonna 1 100 150 0 1 colonna 2 300 2 riga 1 colonna 0 colonna 1 colonna 3 400 450 500 0 1 2 1 riga 1

riga 0

L'array $matrice contiene due soli elementi: matrice[0] e matrice[1].  L'elemento $matrice[0] è un array di 3 elementi: $matrice[0][0], $matrice[0][1], $matrice[0][2].  L'elemento $matrice[1] è un array di 3 elementi: $matrice[1][0], $matrice[1][1], $matrice[1][2]. Il valore contenuto nella prima parentesi quadrata indica la riga, il secondo la colonna. Possiamo rappresentare l'array bidimensionale proprio come una matrice matematica con 2 righe e 3 colonne: $matrice colonna 0 colonna 1 colonna 2 riga 0 100 150 300 riga 1 400 450 500 dove $matrice[0][0]= 100 ; $matrice[0][1]= 150 ; $matrice[0][2]= 300 $matrice[1][0]= 400 ; $matrice[1][1]= 450 ; $matrice[1][2]= 500 Ci sono diversi modi per creare un simile array bidimensionale; vediamone alcuni.
<?php $matrice[0][0] = 100; $matrice[0][1] = 150; $matrice[0][2] = 300; $matrice[1][0] = 400; $matrice[1][1] = 450; $matrice[1][2] = 500; ?>

10
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

<?php $matrice[0] = array(100, 150, 300); $matrice[1] = array(400, 450, 500); ?>

<?php $matrice = array( 0=> array( 0=>100, 1=>150, 2=>300), 1=> array( 0=>400, 1=>450, 2=>500) ) ?>

Gli array bidimensionali consentono anche di realizzare collezioni di strutture complesse (record), chiamate generalmente Tabelle. allievo 0 $tabella 0 nome Aldo 0 cognome classe Bellone 3C 1 2 nome Sara 0 cognome classe Zara 3B 1 2 1 allievo 1

allievo 0

allievo 1

L'array $tabella contiene due soli elementi: tabella[0] e tabella[1].  L'elemento $tabella[0] è un array di 3 elementi: $tabella[0]["nome"], $tabella[0] ["cognome"], $tabella[0]["classe"].  L'elemento $tabella[1] è un array di 3 elementi: $tabella[1]["nome"], $tabella[1] ["cognome"], $tabella [1]["classe"]. Possiamo rappresentare l'array bidimensionale proprio come una tabella con 2 righe e 3 colonne: $tabella nome cognome classe allievo 0 Aldo Bellone 3C allievo 1 Sara Zara 3B 11
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

La creazione della tabella può avvenire in diversi modi:
<?php $tabella[0]["nome"] = "Aldo"; $tabella[0]["cognome"] = "Bellone"; $tabella[0]["classe"] = "3C"; $tabella[1]["nome"] = "Sara"; $tabella[1]["cognome"] = "Zara"; $tabella[1]["classe"] = "3B"; ?> <?php $tabella = array( 0=> array( "nome"=>"Aldo", "cognome"=>"Bellone", "classe"=>"3C"), 1=> array( "nome"=>"Sara", "cognome"=>"Zara", "classe"=>"3B") ) ?>

Risorse sugli array PHP
Funzioni utilizzabili con gli array in inglese): http://it.php.net/manual/en/ref.array.php in italiano: http://www.allwebfree.it/funzioni-php.php?idclafun=15

Quest'opera è stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

12
Bocchi Cinzia Ultimo aggiornamento: 23/02/2012

Sign up to vote on this title
UsefulNot useful