Sei sulla pagina 1di 12

Gli Array

Gli Array (2)

! Gli Array sono una delle funzioni pi interessanti e flessibili.


! Gli Array formano un contenitore per eseguire manipolazioni.

! A differenza degli altri linguaggi.

! Qualunque situazione che raccoglie pezzi di dati da


impacchettare e gestire come cosa unica

! Gli array di PHP possono archiviare dati di vari tipi.


! Possono organizzarli automaticamente in vari modi.

! E adatta ad essere gestita con Array.

! E possibile elencare i modi comuni con cui vengono utilizzati


!Molte variabili di ambiente sono array

! Gli array di PHP sono array associativi.


! Con piccoli meccanismi supplementari.

!La maggior parte delle funzioni dei database trasferiscono


le loro informazioni tramite array
! Creando un pacchetto compatto
DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 152

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

Gli Array (3)


! Associativi significa che archiviano valori di elementi
insieme a valori chiave.

PHP - 153

Gli Array (4)


Esempio:
<?

! Anzich in un rigoroso ordine lineare di indici.

$posizione[Perugia] = Umbria;

! Gli array di altri linguaggi sono array vettori non associativi

$regione = $posizione[Perugia];
echo $regione;

! Se si archivia un elemento in un array (insieme alla chiave)


! Quello di cui si necessita per recuperarlo il valore della
chiave.

?>
Output:

Umbria

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 154

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 155

Gli Array (5)


! Se si vuole unire un ordine numerico ad un gruppo di valori
! Bisogna utilizzare numeri interi come valori chiave

Gli Array (6)


! Gli Array possono essere multidimensionali.
! Possono archiviare valori insieme a sequenze di chiavi
! Anzich una singola chiave.

Esempio:
! Gli array mantengono una lista ordinata degli elementi inseriti

$myarray[1] = il mio primo dato;

! Indipendentemente da quelli che sono i valori chiave.

$myarray[2] = il mio secondo dato;

! Ci permette di trattare gli array come liste!

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 156

Vettori vs. Associativi


! Gli Array vettori sono a dichiarazione e tipi anticipati

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 157

Vettori vs. Associativi (2)


! Gli Array vettori allocano i loro elementi in ordine numerico.

! Sono molto veloci

! Le chiavi utilizzate devono avere valori interi.

! Sia per larchiviazione che per la valutazione

! Gli array di PHP possono avere chiavi di tipo arbitrario.

! Il compilatore alloca larray in un blocco di memoria contiguo!

! Comprese chiavi di tipo STRING.

! Gli array associativi (alcuni li chiamano hash)

! Si possono avere assegnazioni consecutive del tipo:

! Anzich avere un numero fisso di slot

$myarray[1]=1;

! Vengono aggiunti quando serve

$myarray[rosso] = 2;

! Invece di pretendere che gli elementi siano dello stesso tipo

$myarray[3] = 3;

! Gli array in PHP hanno la stessa flessibilit delle variabili.


DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 158

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 159

Array con indici numerici

Array con indici numerici (2)


! L accesso agli elementi in un array indicizzato si effettua con:

! Se non specificato diversamente, gli indici sono numerici

! nome dellarray
! indice dellelemento

$Capitali= array(Parigi, Vienna, NewYork);

Esempio:
0 -> Parigi

$Capitali[0]

->

Parigi

1 -> Vienna
2 -> New York

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 160

Gli Array: Crearli


! Ci sono 3 modi per creare un array in uno script PHP:

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 161

Gli Array: Assegnazione Diretta


! E il modo pi semplice!

! Assegnano un valore allinterno dellarray

! Comportarsi come se una variabile fosse gi un array.

! Utilizzando la funzione array()

! Baster assegnargli un valore:


$myarray[1]=Il mio primo array;

! Chiamando una funzione che restituisca un array.

! Se myarray era una variabile non array


! Diventer un array con un elemento
! Se myarray era un array
! Lelemento sar aggiunto in coda insieme alla chiave
! Se 1 gi utilizzato il vecchio valore verr sostituito.
DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 162

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 163

Gli Array: La funzione array()


! array() crea un nuovo array attraverso

Gli Array: La funzione array()


$carrello=array(frutta,salumi,caff);

! La descrizione dei suoi elementi e delle chiavi associate.


! E equivalente a scrivere:

! Un elenco di elementi da archiviare separati da virgole.

$carrello[0] = frutta;
$carrello[1] = salumi;
$carrello[2] = caff;

! Il sistema penser ad archiviarli in maniera sequenziale.


! Utilizzando delle chiavi numeriche incrementali.
$carrello=array(frutta,salumi,caff);

Se $carrello non era esistente, prima:


$carrello[] = frutta;
$carrello[] = salumi;
$carrello[] = caff;

! Larray ricorder lordine in cui sono stati archiviati gli elementi!

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 164

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

Gli Array: La funzione array()


! array() offre una sintassi speciale per specificare

PHP - 165

Gli Array: La funzione array()

Esempio:

! qualunque tipo di indice per larray

$a=array(rosso=>mela,arancio=>arancia,
giallo=>banana);
echo $a[giallo];

! Invece dei valori degli elementi separati da virgole


! Si forniscono coppie chiave-valore separate da virgole.

Output:

! Chiave e valore sono separati da =>


$carrello=array(0=>frutta,1=>salumi,2=>caff);

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 166

banana

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 167

Gli Array: array restituiti da funzioni


! Chiamando una funzione che restituisce array.

Gli Array: array restituiti da funzioni


Esempio:

! Pu essere una funzione definita dallutente

$myarray = range(1, 5);

! Pu essere una funzione built-in


! Molte funzioni di interazione con DB restituiscono array.
Equivale a:
$myarray = array(1, 2, 3, 4, 5);

! Altre funzioni creano array per altre funzioni.


! Una di queste range()
! Utilizza due interi come argomenti e restituisce un array
! Con tutti gli interi che ci sono tra gli argomenti

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 168

Gli Array: Recupero di valori


! Il modo pi diretto per recuperare un valore utilizzando lindice.

! Se $myarray[5] ha un valore, esso verr restituito.

PHP - 169

Gli Array: La costruzione list()


! Viene sfruttato il fatto che gli array registrono in maniera
silenziosa lordine con il quale sono stati archiviati gli elementi.
! list() assegna diversi elementi di array a variabili in successione.

! Altrimenti si comporter come una variabile indefinita.

$carrello=array(0=>frutta,1=>salumi,2=>caff);

Esempio:

list($prima_busta, $seconda_busta) = $carrello;

<? $a=array(rosso=>mela,arancio=>arancia);
echo $a[giallo];
$a[5]=valore strano;
echo $a[5];
echo $a[8]; // questo non esiste!
?>
DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

!Dar come risultato lassegnazione di frutta alla prima busta


!I salumi alla seconda busta
!Il caff lo portiamo a mano (non abbiamo abbastanza buste!)

PHP - 170

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 171

Gli Array: La costruzione list()

Array multidimensionali
! possibile creare array con pi di una dimensione,
semplicemente definendo ogni elemento come un array.

! Le variabili verranno assegnate nellordine di registrazione

degli elementi nellarray.

Esempio:

! list() lopposto (in comportamento) di array

$punti = array( array(1,2),

! array() impacchetta il suo argomento in un array


! list() divide larray in assegnazioni individuali di variabili

array(5,8),
array(3,1));

! In realt anche possibile definire ogni elemento del primo


array separatamente
! non necessariamente come array.

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 172

Array multidimensionali
! Pensare agli array come multidimensionali rende le cose pi
difficili di quanto non lo siano.
! Basta ricordare che i valori archiviati negli array possono
essere essi stessi array!
! Si possono avere diverse profondit di riferimento in diverse
parti dellarray:
$marray[0]=una stringa;
$marray[1][contiene]=una stringa pi profonda;

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 173

Gli Array: Cancellazione


! Cancellare un elemento da un array semplice
! Come eliminare una variabile assegnata
! Basta chiamare unset()
$myarray[0]=voluto;
$myarray[1]=NON voluto;
$myarray[2]=voluto;
unset($myarray[1]);

! Le chiavi restano inalterate!

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 174

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 175

Gli Array: Iterazione

$info=array();
$info[0]=Caracas;
$info[Caracas]=Venezuela;
$info[1]=Parigi; $info[Parigi]=Francia;
$info[2]=Tokio; $info[Tokio]=Giappone;

! Gli array creano un elenco ordinato coppie chiave/valore


! Nello stesso ordine in cui sono stati inseriti
! Il motivo supportare operazioni che si ripetono
! Non facile farlo con un for()
! Potrebbero esserci indici non numerici
! Negli array come se ci fosse un puntatore nascosto!
! Ogni coppia punta alla seguente
! Quando si aggiunge il primo elemento il puntatore
indica il primo vero elemento

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

Gli Array: Iterazione

PHP - 176

function citta_per_numero($indice, $array_) {


if(IsSet($array_[$indice])) {
$a = $array_[$indice];
$b = $array_[$a];
echo la citt . $a . in: . $b;
}
}
DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 177

Gli Array: Iterazione

Gli Array: Iterazione

! Se vogliamo stampare tutto ci che presente nellarray,


senza conoscerne la struttura precisa?

! La funzione current restituisce il valore archiviato alla


posizione attuale del nostro puntatore

! Si pu stampare il contenuto con le funzioni di iterazione

! Sar il primo elemento se larray viene creato fresh

! current() e next()

! se next viene chiamata sullultimo valore, restituisce falso

function stampa_tutto($array_) {
$tmp=current($array_);
if($tmp) echo $tmp<BR>;
else echo nulla da stampare;
while($tmp = next($array_) echo $tmp<BR>;
}

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 178

! Ricordarsi che le chiamate a funzione di PHP sono


chiamate per valore
! Ogni funzione ricever una nuova copia degli argomenti

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 179

Operare su Array

Operare su Array

Roma

Roma

Milano

Milano

Catania

Catania

Firenze

Firenze

Parigi

Parigi

Bologna

Bologna

next($citta);

current($citta)=Firenze;

current($citta)=Parigi;
DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 180

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

Operare su Array
0

Roma

Milano

Catania

Firenze

Parigi

Bologna

PHP - 181

Gli Array: Reset()


! Per tornare allinizio dellarray (spostare il puntatore)
! Si utilizza reset()
! si pu sostituire la chiamata a current() con reset()
function stampa_tutto($array_) {
$tmp=reset($array_);
if($tmp) echo $tmp<BR>;
else echo nulla da stampare;
while($tmp = next($array_) echo $tmp<BR>;
}

previous($citta);
current($citta)=Firenze;
DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 182

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 183

Gli Array: Ordine Inverso


! Esiste anche prev() ed end()

Gli Array: Estrazione di Chiavi


! E possibile recuperare il valore delle chiavi.

! prev() (sposta il puntatore indietro di una posizione)

! key() si comporta come current().

! end() (sposta il puntatore allultimo elemento)

! Restituisce la chiave anzich il valore.

function stampa_tutto($array_) {
$tmp=end($array_);
if($tmp) echo $tmp<BR>;
else echo nulla da stampare;
while($tmp = prev($array_) echo $tmp<BR>;
}

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 184

function stampa_tutto($array_) {
$tmp=reset($array_);
$tmp2=key($array_);
if($tmp) echo $tmp2 . : . $tmp<BR>;
else echo nulla da stampare;
while($tmp = prev($array_) {
$tmp2 = key($array_);
echo $tmp2 . : . $tmp<BR>;
}
}
DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

Gli Array: Estrazione di Chiavi

PHP - 185

Gli Array: Estrazione di Chiavi

! Tutti gli esempi hanno un BUG!


Per accedere a tutti gli elementi di un array si pu utilizzare
il costrutto for, unitamente allistruzione each.

! se il contenuto false, il ciclo si interrompe

each prende la chiave (o lindice) e il valore dellelemento


corrente dellarray e li mette a sua volta in un nuovo array di
2 elementi

! Esiste each()
! E simile a next()

key: indice

! Restituisce false solo quando termina larray.

value: valore

! Ritorna non solo i valori, ma coppie di chiave/valore in un


nuovo array!

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 186

Inoltre, sposta il cursore avanti di una posizione.

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 187

Gli Array: Estrazione di Chiavi


function stampa_tutto($array_) {
$tmp=reset($array_);
while($tmp = each($array_)) {
$a = $tmp[value];
$b = $tmp[key];
echo $b . : . $tmp<BR>;
}
}

! Per accedere in sequenza a tutti gli elementi di un ciclo


sufficiente chiamare each sullarray un numero di volte
uguale al numero di elementi dellarray:
for ($i = 0; $i <= $N; $i++)
{ $Elemento = each ($Array);
echo chiave: $Elemento[key];
echo valore: $Elemento[value];
}

! Non stato fatto un controllo sul primo elemento

! La funzione count($Nome_Array) restituisce la


lunghezza dellarray.

! Next() restituisce dopo che incrementa (perdiamo un elemento)


! Each() restituisce il valore prima di spostare in avanti il ptr

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

Ciclo for con gli array

PHP - 188

Ciclo for con gli array

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 189

Iterazioni negli Array associativi

Esempio
$Num la lunghezza dellarray che contiene gli ingredienti ($Ingr)

Il ciclo che segue stampa di tutti gli elementi dellarray degli


ingredienti come celle di una tabella

! In un array associativo gli indici vengono assegnati in base


allordine di inserimento.

for ($i = 0; $i < $Num; $i++) {


$Riga = each($ingr);
$Num = $Riga[key] + 1;
echo "<tr><td>ingrediente $Num :</td>
<td>$Riga[value] </td></tr>";
}

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

! Gli elementi degli array associativi possiedono comunque un


indice oltre alla chiave numerica.

! Si possono utilizzare le tecniche per literazione in un array


indicizzato anche con gli array associativi.

PHP - 190

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 191

Ordinamento di un Array

Ordinamento di un Array
! Se si ordina un array associativo con sort()

! Gli elementi di un array indicizzato numericamente sono


ordinati grazie agli indici.
! Se si omettono gli indici, lordine di inserimento determina
lordinamento dellarray.
! possibile ordinare alfabeticamente un array sulla base
dei suoi contenuti con la funzione sort($Mio_Array).

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 192

! Le chiavi inserite dallutente vengono sostituite da indici


numerici.
! Per ordinare alfabeticamente un array associativo a
seconda dei suoi contenuti senza distruggere le chiavi si
utilizza la funzione
! asort($Mio_Array).

Conversione di stringhe in array


implode() converte un array in una stringa.

PHP - 193

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

Funzioni per gli array


is_array () restituisce vero se largomento un array.

Ha due argomenti: il separatore, ad es. , larray che deve


essere convertito in stringa.

count() size_of() restituisce la dimensione dellarray.

$Stringa = implode(, ,$carrello)


echo $Stringa;

in_array() restituisce vero se il primo argomento


presente nel secondo (larray).

stampa: frutta, salumi, caff


explode() converte una stringa in un array.
Anche explode ha un argomento separatore, che delimita
un elemento dallaltro (ad esempio, uno spazio).
DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 194

unset($mio_array[1])
dallarray.

cancella

lelemento

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

dato

PHP - 195

Array e WHILE

Si pu utilizzare il anche costrutto while insieme alle istruzioni


each e list nella condizione:
while(list($Indice,$Valore)=each($Mio_Array))
{ echo $Indice - $Valore;

Array nelle Stringhe


! Allinterno di una stringa possibile accedere al valore
degli elementi di un array.
echo valore inserito: $Mio_Array[1];
echo capitale della Francia: $Capitali[Francia];

}
list assegna alle variabili $Indice e $Valore
rispettivamente lindice e il valore dellelemento restituito da
each;

! Notare che allinterno di una stringa la chiave non


compresa tra virgolette doppie!

Quando si scorso tutto larray, each restituisce un valore


nullo, rendendo cos falsa la condizione.
DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 196

DMI - Universit di Catania - Dott. Costantino Pistagna <pistagna@dmi.unict.it> - BSD restrictions applies where possible

PHP - 197