5 array in php

Page 1

Array


Cosa sono gli array Gli array non sono altro che contenitori dove poter memorizzare, all'interno stessa variabile, piĂš valori identificati e gestiti con un contatore univoco per ogni dato inserito. Un array si può immaginare come una tabella con due colonne, una contenente un numero che partendo da zero aumenta di 1 per ogni riga e l’altra che contiene il dato da memorizzare. Indice 0 1 2 n

Valore Lorenzo Giovanni Anna ‌


Il numeratore, detto indice, può essere numerico o letterale (associativo) e non ha un obbligo sequenziale. Schemi di esempio per array con indici numerici e associativi: Indice 0 1 2 n

Valore Lorenzo Giovanni Anna …

Indice Associativo nome cognome user password

Valore Mario Rossi mrossi 1234

Questi esempi si riferiscono ad array monodimensionali. In PHP è possibile gestire anche gli array multidimensionali, che tratteremo più avanti.


In quali contesti vanno utilizzati gli array? • Per rappresentare valori logicamente relativi ad un’unica entità (ad esempio, la scheda anagrafica di una persona, composta dagli elementi Nome, Cognome, Indirizzo, etc.) • Per rappresentare valori aventi la stessa funzione semantica in contesti distinti (ad esempio, la scheda delle lezioni di una palestra per giorno) Prendiamo in considerazione l’ultimo esempio: se non avessimo l’ausilio degli array avremmo dovuto utilizzare più variabili: $lezione_lun = "step"; $lezione_mar = "gag"; $lezione_mer = "step"; ..


Come si definiscono gli array In PHP gli array si definiscono tramite la parola chiave array(). Questo costrutto ci permette di definire un array vuoto o con valori specificati: //crea un array vuoto $arr = array(); //creo un array con tre valori: $arr = array(“Lorenzo”, “Giovanni”, “Anna”);


Il costrutto array() • Definisce un array; • se il contenuto dele parentesi tonde è nullo, l’array viene creato vuoto; • per associare all’array dei valori, al momento della definizione basta indicarli nelle parentesi separati da virgola; • ad ogni elemento dell’array, specificato direttamente alla definizione dello stesso, verrà attribuito un indice numerico che parte da 0.


Aggiungere valori in un array (unidimensionale) In PHP si possono aggiungere valori ad un array attraverso l’operatore di assegnazione, specificando o meno la posizione. Prestate attenzione agli esempi che seguono: $a= array();

//definisco un array vuoto

$a[0] = “abc"; $a[1] = “def"; $a[2] = “ghi";

//All’array definito aggiungo 3 valori alle posizioni 0, 1, 2

//All’array $a aggiungo un quarto valore. Se non specifico la posizione, questa viene assegnata automaticamente al primo valore libero: $a[] = “lmn";


//definisco un array con 3 valori. In questo caso verrà utilizzato un indice numerico che parte da 0 $a= array(“abc”, “def”, “ghi”); //Ai precedenti 3 elementi ne aggiungo altri 3 $a[3] = “lmn"; $a[4] = “opq"; $a[5] = “rst"; //All’array $a aggiungo un settimo elemento. Se non specifico la posizione, questa viene assegnata automaticamente al primo valore libero: $a[] = “uvz";

$a= array(“abc”);

//Definisco un nuovo array con 1 valore

//aggiungo 3 elementi. Fate attenzione agli indici: non sono sequenziali, ma non è un errore perché in PHP è consentito $a[3] = “def"; $a[5] = “ghi";


Definire e utilizzare un array con chiavi associative Come accennato, in PHP esistono gli array con chiavi associative: queste, a differenza di quelle numeriche, che possono essere gestite e incrementate automaticamente dal linguaggio, devono essere specificate dal programmatore. La definizione e l’aggiunta di elementi nell’array rimane pressochÊ invariata. Vediamo di seguito la definizione di un array che memorizza i dati di una persona e alcuni esempi correlati.


Note: • le chiavi associative sono delle stringhe e dovranno essere racchiuse tra virgolette. • Nella definizione di elementi, contestualmente alla definizione di un array tramite il costrutto array(), il nome dell’indice associativo dovrà essere seguito dal simbolo =>


Esempi di definizione di array associativi: //definisco l’array persona – 1^ metodo: $persona= array("nome" => "Mario", "cognome" => "Rossi", "indirizzo" => "via roma, 11");

//definisco l’array persona – 2^ metodo: $persona= array(); $persona[“nome”] = “Mario"; $persona[“cognome”] = “Rossi"; $persona[“indirizzo”] = “via roma, 11";


Conteggiare gli elementi di un array Utilizzando gli array, sorge spesso la necessità di conoscere il numero degli elementi che compongono un array. Per ottenere questa informazione basta utilizzare il costrutto count(), che restituisce un numero intero rappresentante la dimensione dell’array passato. Esempi: $a= array(“abc”, “def”, “ghi”); $size = count($a);

// $size vale 3

$persona= array("nome" => "Mario", "cognome" => "Rossi"); $size = count($persona); // $size in questo caso vale 2


Accedere in lettura e scrittura agli elementi di un array: l’operatore [ ] Per accedere al valore di una variabile in PHP sappiamo che basta utilizzare il nome della stessa: $valore = 3; $valore = $i+1;

Con gli array il nome non basta: memorizzando piÚ informazioni, per leggerne una specifica, dobbiamo indicare oltre al nome dell’array anche la chiave (o indice) associata al valore.


Sapendo che un array può avere indici numerici o associativi e che quelli numerici impostati per default partono da 0 incrementando di 1, per accedere ai valori di un array è necessario specificare gli indici numerici o quelli di tipo stringa attribuiti in modo esplicito. Di seguito viene riportato qualche esempio (nelle istruzioni che seguono vedrete l’utilizzo del costrutto echo: questa è un’istruzione che permette di stampare, a video o su browser, il contenuto passato).


Esempi: $a= array(“abc”, “def”, “ghi”); $a[3] = “lmn”;

//Scrivo un nuovo valore nell’array

echo $a[0];

//Stamperà la stringa “abc”

echo $a[2];

//Stamperà la stringa “ghi”

$persona= array("nome" => "Mario", "cognome" => "Rossi", "indirizzo" => "via roma, 11"); echo $persona[“nome”]; echo $persona[“indirizzo”];

//Stamperà la stringa “Mario” //Stamperà la stringa “via roma, 11”


Ordinare un array • La funzione sort($array) ordina valori in senso crescente, cambiando le associazioni con chiavi numeriche; • la funzione rsort($array) ordina valori in senso decrescente, cambiando le associazioni con chiavi numeriche; • la funzione asort($array) ordina valori in senso crescente, mantenendo le associazioni alle chiavi definite in precedenza; • la funzione ksort($array) ordina chiavi in senso crescente, mantenendo le associazioni alle chiavi definite in precedenza; • la funzione shuffle($array) mescola in modo casuale le associazioni chiave-valore.


Note: Proseguire con le lezioni e provare a definire un array e ad applicargli successivamente le funzioni di ordinamento sopra descritte. Provare poi a scorrere e stampare gli elementi di un array per verificare il funzionamento delle funzioni. Nel corso della lezione verrĂ mostrato come scorrere gli elementi di un array.


Conversione di un array in stringhe A volte potremmo avere la necessità di memorizzare i dati contenuti in un array in tante variabili, o viceversa accorpare i dati di piÚ stringhe in un unico array. PHP offre due funzioni native molto semplici per ottenere i due scopi: • la funzione esplode(separatore, stringa) che scompone una stringa in un array di stringhe in base al carattere o stringa passato come separatore. • la funzione implode(separatore, stringa) che suddivide gli elementi di un array in una stringa, separandoli tra loro utilizzando il carattere o la stringa passato come separatore.


Esempi: $lista = explode (" ", "Una lezione interessante!"); //Viene creato un nuovo array chiamato $lista. Questo array conterrà tutte le parole ottenute usando lo spazio come separatore e quindi l’array conterrà i seguenti elementi: $lista[0] = "Una"; $lista[1] = "lezione"; $lista[2] = "interessante!"; $stringaNomi = "Mirco,Maria,Miriam"; $nomi = explode (",",$stringaNomi); //Viene creato un nuovo array chiamato $nomi. Questo array conterrà tutte le parole ottenute usando la virgola come separatore e quindi l’array conterrà i seguenti elementi: $nomi[0] = "Mirco"; $nomi[1] = "Maria"; $nomi[2] = "Miriam";


//Definisco un nuovo array: $lista = array(); $lista[0] = "Una"; $lista[1] = "lezione"; $lista[2] = "interessante!"; $stringa = implode (" ", $lista); //Produce come risultato la seguente stringa: "Una lezione interessante!"

//Definisco un nuovo array: $nomi = array(); $nomi[0] = "Mirco"; $nomi[1] = "Maria"; $nomi[2] = "Miriam"; $elenco_nomi = implode (", ", $nomi); //Produce come risultato la seguente stringa: "Mirco, Maria, Miriam"


Scorrere il contenuto di un array Gli array in PHP sono molto utili ed utilizzati. Oltre alla loro definizione e alle funzioni native, per la loro gestione è importantissimo saper scorrere il contenuto di un array. Abbiamo visto che un array è un contenitore di n elementi e che non basta specificare il nome per leggerne il contenuto: per farlo dobbiamo specificare l’indice, numerico o associativo, dell’elemento che vogliamo leggere. E se volessimo leggere tutti gli elementi?


Inutile dire che non sempre è possibile, né è una buona pratica di programmazione, leggere tutti gli elementi specificando indice per indice. Diventa quindi necessario vedere come poter leggere dinamicamente il contenuto di un array, del quale potremmo tra l’altro non sapere a priori il numero esatto di elementi che contiene. Vedremo quindi come ciclare un array attraverso l’uso delle due strutture iterative più comunemente utilizzate per questo scopo: il costrutto for e il costrutto foreach, importante soprattutto per scorrere array con chiavi associative.


Nota: Considerando che da programma del corso non sono state ancora affrontate nel dettaglio le strutture iterative (for, do, do-while, ..), ne verrà mostrata ed illustrata solamente una tramite gli esempi che seguono. Consigliamo di esercitarsi nuovamente, una volta viste e studiate tutte le strutture iterative, a ciclare il contenuto di un array con tutti i modi offerti da PHP per prenderne dimestichezza e per imparare ad utilizzarle tutte per l’iterazione di array.


Cosa significa ciclare un array: Come già detto un array è un contenitore di piÚ elementi. Ciclarlo vuol dire scorrere elemento per elemento per tutta la sua lunghezza. Questa operazione ci permette di leggere e quindi di utilizzare per i nostri scopi, alcuni o tutti i valori memorizzati un array. Per scorrerlo (ciclarlo, iterarlo) si deve utilizzare necessariamente una struttura iterativa.


Note: Ricordiamo che gli indici possono essere numerici o associativi. Per array monodimensionali con indici associativi diventa pressochĂŠ inutile scorrere dinamicamente un array con il solo for: è necessario utilizzare un’altra struttura iterativa: il foreach. Ricordiamo che gli indici numerici automatici partono da 0. Per poter scorre un array è inoltre necessario conoscerne la lunghezza. Per poterlo fare utilizziamo la funzione nativa count() che restituisce il numero di elementi di un array o il numero di caratteri di una stringa.


Esempi: /* Visualizzazione elemento per elemento con indici di default con costrutto for. Per scorrere un array con chiavi numeriche che partono da 0, devo costruirmi un indice numerico che utilizzerò ed incrementerò dinamicamente per leggere, ad ogni singola iterazione, ogni singolo elemento. */ //Definizione di due array con indici numerici incrementali $alfabeto= array(“abc”, “def”, “ghi”); $nomi= array(“maria”, “mirco”, “simona”); //Scorro entrambi gli array con due cicli e ne stampo a video il contenuto /* $indice è una variabile che parte da 0 e incremento ad ogni iterazione per poterla utilizzare come indice numerico dell’array */ for ($indice = 0; $indice < count($alfabeto); $indice++){ echo $alfabeto[$indice]; }


for ($i = 0; $i < count($nomi); $i++){ echo “Il nome memorizzato a posizione: ”. $i . “ è ” . $nomi[$i]; } //Definisco un array con chiavi numeriche non auto incrementali $valori = array(); $valori[1] = 2; $valori[3] = 4; $valori[5] = 6; $valori[7] = 8; $valori[9] = 10; for ($i = 1; $i < count($nomi); $i=$i+2){ echo “Il numero memorizzato a posizione: ”. $i . “ è ” . $valori[$i]; }


/* Visualizzazione elemento per elemento con indici non di default. Per scorrere un array con indici non di default devo affidarmi alla funzione foreach per leggere l’elemento corrente di un array non conoscendo il nome dell’indice associativo o numerico non incrementale */ /* Il foreach() permettere di scrivere l'elemento corrente di un array all'interno di una variabile. */ foreach ($alfabeto as $element) { echo $element; }

foreach ($nomi as $valore) { echo “Il nome memorizzato è:” . $valore; }


$voti = array(); $voti[“matematica”] = 7; $voti[“storia”] = 5; $voti[“italiano”] = 8; $voti[“geografia”] = 6.5; foreach ($voti as $valore) { echo $valore; }


Array multidimensionali Un array può essere a più dimesioni, tipicamente a 2. Cos’è un array bidimensionale o multidimensionale? È un array che contiene al suo interno due (bidimensionale) o più array semplici (multidimensionale). Abbiamo visto che un array semplice (monodimensionale) si può immaginare come una tabella con due colonne, una contenente un numero che partendo da zero aumenta di 1 per ogni riga, e l’altra il dato da memorizzare.


Ecco l’esempio tabellare di due array multidimensionali con chiavi numeriche e associative: $menu: Prima dim. 0 1 2 3

Seconda dimensione 0 1 Lasagne Pollo Zuppa Merluzzo Spaghetti Arrosto Zuppa Frittata

2 Patate Purè Verdure Insalata

3 Frutta Frutta Frutta Frutta

Seconda dimensione primo secondo Lasagne Pollo Zuppa Merluzzo Spaghetti Arrosto Zuppa Frittata

contorno Patate Purè Verdure Insalata

dolce Frutta Frutta Frutta Frutta

$menu_ass: Prima dim. lunedì martedì mercoledì giovedì


Accedere agli elementi di un array multidimensionale Come anche per gli array ad una dimensione, anche per i multidimensionali si utilizza l’operatore [] per ogni dimensione. Di seguito alcuni esempi per comprendere come definire, aggiungere e leggere elementi da un array a più dimensioni: //Definisco un array a due dimensioni con chiavi numeriche $menu[0][0] = “Lasagne”; $menu[0][1] = “Pollo”; $menu[0][2] = “Patate”; $menu[0][3] = “Frutta”; $menu[1][0] = “Zuppa”; $menu[1][1] = “Merluzzo”; $menu[1][2] = “Purè”;


$menu[1][3] = “Frutta”; $menu[2][0] = “Spaghetti”; $menu[2][1] = “Arrosto”; $menu[2][2] = “Verdura”; $menu[2][3] = “Frutta”; $menu[3][0] = “Zuppa”; $menu[3][1] = “Frittata”; $menu[3][2] = “Insalata”; $menu[3][3] = “Frutta”;

//Definisco un array a due dimensioni con chiavi associative $menu_ass[“lunedì”][“primo”] = “Lasagne”; $menu_ass [“lunedì”][“secondo”] = “Pollo”; $menu_ass [“lunedì”][“contorno”] = “Patate”; $menu_ass [“lunedì”][“dolce”] = “Frutta”; $menu_ass [“martedì”][“primo”] = “Zuppa”; $menu_ass [“martedì”][“secondo”] = “Merluzzo”; $menu_ass [“martedì”][“contorno”] = “Purè”;


$menu_ass [“martedì”][“dolce”] = “Frutta”; $menu_ass [“mercoledì”][“primo”] = “Spaghetti”; $menu_ass [“mercoledì”][“secondo”] = “Arrosto”; $menu_ass [“mercoledì”][“contorno”] = “Verdura”; $menu_ass [“mercoledì”][“dolce”] = “Frutta”; $menu_ass [“giovedì”][“primo”] = “Zuppa”; $menu_ass [“giovedì”][“secondo”] = “Frittata”; $menu_ass [“giovedì”][“contorno”] = “Insalata”; $menu_ass [“giovedì”][“dolce”] = “Frutta”;

//Di seguito un altro modo di definire gli array multidimensionali: $a1(“spaghetti”, “arrosto”, “verdura”, “frutta”); $a2(“zuppa”, “frittata”, “insalata”, “frutta”); $menu = Array ("lunedi" => $a1, "martedi" => $a2);


//Anche per leggere gli elementi, come per definirli, userò le doppie parentesi indicando i rispettivi indici:

echo $menu[2][2];

//Stamperà: verdura

echo $menu[3][0];

//Stamperà: zuppa

echo $menu[1][3];

//Stamperà: frutta

echo $menu_ass [“giovedì”][“contorno”];

//Stamperà: insalata

echo $menu_ass [“martedì”][“secondo”];

//Stamperà: merluzzo


Leggere gli array bidimensionali con i cicli Come per gli array ad una dimensione, per leggere un array multidimensionale è necessario ciclarlo: scorrere elemento per elemento per tutta la sua lunghezza. Avendo però più dimensioni è necessario effettuare un ciclo per ogni dimensione. Di seguito degli esempi per spiegare l’utilizzo del for e del foreach nella lettura degli elementi di un array bidimensionale.


for ($i = 0; $i < count($menu); $i=$i+2){ for ($z = 1; $z < count($menu[$i]); $z++){ echo $menu[$i][$z]; } } foreach ($menu as $element) { foreach ($element as $valore) { echo $valore; } }


FINE LEZIONE


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.