PHP: Array Array = variabile che contiene un insieme (ordinato) di elementi $strumenti Elemento: scalare (semplice) o un altro array Individuazione degli elementi mediante indicizzazione numerica associativa 1
Array Indicizzati Numericamente Creazione di array mediante enumerazione dei suoi elementi: $strumenti = array('', '', '', ''); Creazione di array mediante assegnamento con un altro array: $a = $strumenti; $numeri = range(1, 10); $numeri = array(1,2,3,4,5,6,7,8,9,10); $lettere = range('a', 'z'); $lettere = array('a','b',..., 'z'); Creazione di array mediante caricamento da database 2
Array Indicizzati Numericamente (ii) Accesso di un elemento dell array: mediante nome-array + indice 0 echo $strumenti[2]; 1 2 3 Modifica del contenuto di un elemento: mediante assegnamento $strumenti[2] = 'arpa'; arpa 3
Array Indicizzati Numericamente (iii) Creazione 'incrementale' di array: $strumenti[0] = ''; $strumenti[1] = ''; $strumenti[2] = ''; $strumenti[3] = ''; Accesso agli elementi dell array mediante cicli: for($i=0; $i<4; $i++) echo "$strumenti[$i] "; foreach($strumenti as $strumento) echo "$strumento "; 4
Array Indicizzati Associativamente Indice rappresentato da un nome (chiave): 2500 $prezzi = array(''=>2500, ''=>8000, ''=>5400, ''=>11000); 8000 5400 11000 5
Array Indicizzati Associativamente (ii) Accesso agli elementi dell array: mediante nome-array + chiave 2500 echo $prezzi['']; 5400 8000 5400 11000 6
Array Indicizzati Associativamente (iii) Creazione 'incrementale' di array associativo: $prezzi[''] = 2500; $prezzi[''] = 8000; $prezzi[''] = 5400; $prezzi[''] = 11000; Accesso agli elementi dell array associativo mediante cicli: foreach($prezzi as $prezzo) echo "$prezzo "; 2500 8000 5400 11000 foreach($prezzi as $strumento => $prezzo) echo "$strumento: $prezzo <br />"; : 2500 : 8000 : 5400 : 11000 7
Operatori per Array Simbolo Nome Esempio Risultato + Unione $a + $b Concatenazione di $a con gli elementi di $b che hanno indici diversi da quelli in $a == Uguaglianza $a == $b Uguaglianza di $a e $b === Identità $a === $b Identità di $a e $b!= Disuguaglianza $a!= $b Disguaglianza di $a e $b!== Non identità $a!== $b Non identità di $a e $b $a = array(1,2,3); $b = array(4,5,6,7,8); $c = array('1','2','3'); $a + $b: (1,2,3,7,8) $a == $b: false $a == $c: true $a === $c: false 8
Indicizzazione numerica: Array Multidimensionali $articoli = array(array('flt','', 2500), array('vln', '', 8000), array('obo', '', 5400), array('lut', '',11000)); FLT 2500 VLN 8000 OBO 5400 LUT 11000 9
Array Multidimensionali (ii) Accesso mediante ciclo for: for($riga=0; $riga<4; $riga++) { for($colonna=0; $colonna<3; $colonna++) echo $articoli[$riga][$colonna]. ' '; echo '<br />'; } $riga $colonna FLT 2500 VLN 8000 OBO 5400 LUT 11000 FLT 2500 VLN 8000 OBO 5400 LUT 11000 10
Indicizzazione mista: Array Multidimensionali (iii) $articoli = array(array('codice'=>'flt', 'strumento'=>'', 'prezzo'=>2500), array('codice'=>'vln', 'strumento'=> '', 'prezzo'=>8000), array('codice'=>'obo', 'strumento'=>'', 'prezzo'=>5400), array('codice'=>'lut', 'strumento'=>'', 'prezzo'=> 11000)); codice strumento prezzo FLT 2500 VLN 8000 OBO 5400 LUT 11000 11
Accesso mediante ciclo foreach: Array Multidimensionali (iv) foreach($articoli as $articolo) { foreach($articolo as $indice => $contenuto) echo "$indice: $contenuto "; echo '<br />'; } codice: FLT strumento: prezzo: 2500 codice: VLN strumento: prezzo: 8000 codice: OBO strumento: prezzo: 5400 codice: LUT strumento: prezzo: 11000 $articolo codice strumento prezzo FLT 2500 VLN 8000 OBO 5400 LUT 11000 12
Ordinamento di Array Ordinamento di array indicizzati numericamente: sort() $strumenti = array('', '', '', ''); sort($strumenti); 13
Ordinamento di Array (ii) Ordinamento di array indirizzati associativamente: ksort() e asort() $prezzi = array(''=>2500, ''=>8000, ''=>5400, ''=>11000); 2500 8000 5400 2500 11000 ksort($prezzi); 11000 5400 8000 2500 5400 8000 asort($prezzi); 11000 14
Ordinamento di Array (iii) Ordinamento di array in ordine inverso: rsort(), krsort() e arsort() rsort($strumenti); krsort($prezzi); 2500 8000 5400 11000 8000 5400 11000 2500 arsort($prezzi); 2500 8000 5400 11000 11000 8000 5400 2500 15
Riordinamento Casuale di Array: shuffle.php shuffle($a): riordina casualmente gli elementi di $a <?php $quadri = array('babakar.jpg', 'giardino.jpg', 'grano.jpg', 'infiore.jpg', 'mosaico.jpg', 'kand.jpg', 'kand2.jpg', 'kand3.jpg', 'kand4.jpg', 'kand5.jpg', 'kand6.jpg', 'pic1.jpg','pic2.jpg', 'pic3.jpg', 'ramo.jpg', 'van1.jpg', 'van2.jpg', 'van3.jpg', 'van4.jpg', 'van5.jpg'); shuffle($quadri);?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>pinacoteca Virtuale</title> </head> <body> <h1>pinacoteca Virtuale</h1> <table width="100%"> <tr> <?php for($i=0; $i<3; $i++) { echo "<td align='center'><img src='../immagini/$quadri[$i]' height='100'></td>"; }?> </tr> </table> </body> </html> 16
Riordinamento Casuale di Array: shuffle.php (ii) 17
Inversione di Array array_reverse($a): genera un array inverso di $a $inv_str = array_reverse($strumenti); $inv_art = array_reverse($articoli); codice strumento prezzo FLT 2500 VLN 8000 OBO 5400 LUT 11000 codice strumento prezzo LUT 11000 OBO 5400 VLN 8000 FLT 2500 18
Conteggio degli Elementi in Array count($a): restituisce il numero di elementi dell array $a echo count($strumenti); 4 array_count_values($a): restituisce una array associativo che indica la frequenza di ogni elemento nell array $a (gli elementi di $a devono essere scalari) 3 2 1 2 19
Conversione di Array Associativi in Variabili Scalari extract(array a [, int tipologia [, string prefisso]]): genera un insieme di variabili omonime delle chiavi di a extract($prezzi); echo "$ $ $ $" 2500 8000 5400 11000 2500 8000 5400 11000 Parametri opzionali: tipologia: tipologia di gestione delle collisioni (default: sovrascrittura) prefisso: rilevante per certe tipologie di collisione Tipologia EXTR_OVERWRITE EXTR_SKIP EXTR_PREFIX_SAME EXTR_PREFIX_ALL EXTR_PREFIX_INVALID EXTR_IF_EXISTS Significato Sovrascrive le variabili in caso di collisione Salta l elemento che provoca la collisione Crea una variabile $prefisso_chiave solo in caso di collisione Crea tutte le variabili $prefisso_chiave, indipendentemente dalle collisioni Crea una variabile $prefisso_chiave in caso di identificatore (chiave) non valido Estrae solo le variabili che già esistono 20
$libri titolo autore anno copie asterix aldo 1962 5 obelix osvaldo 1964 3 fiordaliso anna 1999 2 medioevo mino 1956 1 romani rino 2001 10 greci giovanni 1972 4 misteri giacomo 1986 3 gioia di vivere michele 1952 7 vivere la gioia michele 1954 9 Esercitazione: Biblioteca libro asterix asterix asterix fiordaliso gioia di vivere medioevo misteri obelix romani romani $prestiti lettore annalisa donato floriano rosa zeno giacomo giacomo donato emma valerio $lettori nome nascita citta andrea 1982 bergamo annalisa 1975 mantova beniamino 1999 chieti ciro 1950 salerno donato 1988 lucca emma 1955 sassari floriano 1970 grosseto giacomo 1968 palermo ilaria 1982 firenze paolo 1967 firenze rosa 1992 firenze valerio 1981 genova zeno 1952 trieste 21
Esercitazione: biblioteca.php <?php $libri = array(array('titolo'=>'asterix', 'autore'=>'aldo', 'anno'=>1962, 'copie'=>5), array('titolo'=>'obelix', 'autore'=>'osvaldo', 'anno'=>1964, 'copie'=>3), array('titolo'=>'fiordaliso', 'autore'=>'anna', 'anno'=>1999, 'copie'=>2), array('titolo'=>'medioevo', 'autore'=>'mino', 'anno'=>1956, 'copie'=>1), array('titolo'=>'romani', 'autore'=>'rino', 'anno'=>2001, 'copie'=>10), array('titolo'=>'greci', 'autore'=>'giovanni', 'anno'=>1972, 'copie'=>4), array('titolo'=>'misteri', 'autore'=>'giacomo', 'anno'=>1986, 'copie'=>3), array('titolo'=>'gioia di vivere', 'autore'=>'michele', 'anno'=>1952, 'copie'=>7), array('titolo'=>'vivere la gioia', 'autore'=>'michele', 'anno'=>1954, 'copie'=>9)); $prestiti = array(array('libro'=>'asterix', 'lettore'=>'annalisa'), array('libro'=>'asterix', 'lettore'=>'donato'), array('libro'=>'asterix', 'lettore'=>'floriano'), array('libro'=>'fiordaliso', 'lettore'=>'rosa'), array('libro'=>'gioia di vivere', 'lettore'=>'zeno'), array('libro'=>'medioevo', 'lettore'=>'giacomo'), array('libro'=>'misteri', 'lettore'=>'giacomo'), array('libro'=>'obelix', 'lettore'=>'donato'), array('libro'=>'romani', 'lettore'=>'emma'), array('libro'=>'romani', 'lettore'=>'valerio')); $lettori = array(array('nome'=>'andrea', 'nascita'=>1982, 'citta'=>'bergamo'), array('nome'=>'annalisa', 'nascita'=>1975, 'citta'=>'mantova'), array('nome'=>'beniamino', 'nascita'=>1999, 'citta'=>'chieti'), array('nome'=>'ciro', 'nascita'=>1950, 'citta'=>'salerno'), array('nome'=>'donato', 'nascita'=>1988, 'citta'=>'lucca'), array('nome'=>'emma', 'nascita'=>1955, 'citta'=>'sassari'), array('nome'=>'floriano', 'nascita'=>1970, 'citta'=>'grosseto'), array('nome'=>'giacomo', 'nascita'=>1968, 'citta'=>'palermo'), array('nome'=>'ilaria', 'nascita'=>1982, 'citta'=>'firenze'), array('nome'=>'paolo', 'nascita'=>1967, 'citta'=>'firenze'), array('nome'=>'rosa', 'nascita'=>1992, 'citta'=>'firenze'), array('nome'=>'valerio', 'nascita'=>1981, 'citta'=>'genova'), array('nome'=>'zeno', 'nascita'=>1952, 'citta'=>'trieste'));?> Query 1: Quali sono i libri? 22
Esercizio 1: processa_query_1.php 23
Esercizio 1: processa_query_1.php... <body> <?php require('biblioteca.php'); echo '<table border="1" cellspacing="0" cellpadding="2">'; echo '<tr><th style="background-color:lavender">titolo</th></tr>'; foreach($libri as $libro) echo '<tr><td align="center">'. $libro['titolo']. '</td></tr>'; echo '</table>';?> </body> </html> 24
Esercizio 2: processa_query_2.php 25
Esercizio 3: processa_query_3.php 26
Esercizio 4: processa_query_4.php 27
Esercizio 5: processa_query_5.php query_5.php processa_query_5.php 28
Esercizio 6: processa_query_6.php query_6.php processa_query_6.php 29
Esercizio 7: processa_query_7.php query_7.php processa_query_7.php 30
Esercizio 8: processa_query_8.php query_8.php processa_query_8.php 31
Esercizio 9: processa_query_9.php 32
Esercizio 10: processa_query_10.php 33
Esercizio 11: processa_query_11.php 34
Esercizio 12: processa_query_12.php 35