Introduciamo l'utilizzo degli array negli script PHP parlando degli array a indice numerico, ovvero la tipologia di array più comune.
Un array è una collezione di variabili e viene identificato da un nome e da un indice.
La metafora più comune per spiegare il concetto di array è la cassettiera. Una cassettiera è un mobile composto da più cassetti disposti in verticale.
Se diamo un nome alla cassettiera, ad esempio "calzini" e numeriamo ogni cassetto partendo dall'alto verso il basso otteniamo un array:
calzini -> 0: primo cassetto
calzini -> 1: secondo cassetto
Nel seguente esempio traduco semplicemente in codice PHP la metafora della cassettiera:
$calzini = Array();
$calzini[0] = 'corti';
$calzini[1] = 'lunghi';
$calzini[2] = 'di lana'];
...
Nella prima riga definisco la variabile $calzini come array. Nelle righe seguenti inizio a riempire la mia cassettiera associando ad ogni cassetto una stringa... ovvero il tipo di calzini che contiene!
Per eseguire questa operazione puoi utilizzare anche una notazione più compatta:
$calzini = Array('corti', 'lunghi', 'di lana', ...);
Nomenclatura:
A questo punto è bene specificare che i numeri utilizzati tra parentesi quadre si chiamano indici. E' obbligatorio iniziare con l'indice zero (0) e utilizzare valori crescenti maggiorando di una unità il valore dell'ultimo indice.
Le parole 'corti', 'lunghi', ecc... utilizzate per riempire l'array si chiamano valori e possono essere di qualunque tipo: stringhe, numeri, oggetti.
Aggiungere elementi ad un array:
Se in un secondo momento vuoi inserire un nuovo cassetto nell'array (accodandolo a quelli esistenti) puoi utilizzare 2 tecniche.
La prima tecnica consiste nel contare di quanti cassetti si compone l'array ed inserire il nuovo valore in un nuovo cassetto:
$calzini[count($calzini)] = 'estivi';
La funzione count prende come input il nome di un array e fornisce il numero di elementi che lo compongono.
E' doveroso far notare che se la funzione "count" fornisce "3" come risultato significa che nell'array sono presenti 3 cassetti. L'indice del terzo cassetto non sarà "3" bensì "2" in quanto il conteggio degli indici inizia con zero (0)!!!
In base a quando sopra la funzione "count" restituisce di fatto il primo indice libero (nuovo) dell'array. Nell'esempio appena visto hai utilizzato questa caratteristica degli array per inserire un nuovo elemento.
Nella seconda tecnica userai una funzione dedicata agli array pensata proprio per aggiungere nuovi valori:
array_push($calzini, 'invernali', 'microfibra', ...);
Come leggere un array:
Fin'ora hai visto come si crea e come si aggiungono elementi ad un array. Vediamo ora come è possibile accedere ad un cassetto specifico per guardare cosa contiene... ovvero come leggere il contenuto di un array.
Per prima cosa proviamo a leggere il contenuto di una posizione specifica dell'array. Nella seguente porzione di codice andrai a creare un nuovo array con alcuni valori e successivamente lo utilizzerai per visualizzarli:
$arr = Array('mela', 'arancia', 'pera');
echo $arr[0]; // mela
echo $arr[2]; // pera
echo $arr[3]; // Errore!
Mi pare non ci siano molti commenti da fare... Ti parlerò solamente dell'ultima istruzione.
Come vedi ho richiesto l'elemento avente indice "3" di un array composto di soli 3 elementi. Questo indice non esiste!
La motivazione, come ti ho già accennato, sta nel fatto che il primo elemento ha indice zero (0), il secondo ha indice "1" e così via fino ad arrivare all'ultimo elemento che avrà indice "n-1" dove "n" indica il numero di elementi inseriti nell'array.
Leggere un'intero array con un ciclo
Accedere ad un cassetto specifico della nostra cassettiera può limitare la tua libertà di azione. Ci sono casi in cui ti serve un'operazione automatica per vedere cosa c'è all'interno di ogni cassetto: ti serve un ciclo!
Traduciamo la precedente metafora in un caso pratico. Hai immagazzinato in un array le tue entrate giornaliere sotto forma di numero di Euro arrotondato per difetto (utilizziamo i soli numeri interi che è più facile!). A fine mese vuoi conoscere l'incasso totale.
Ecco il codice che ti serve:
// Definisci l'array delle tue entrate.
$entrate = Array(1, 10, 4, 7, 8, 9, 0, 2, 8, 5, 2);
// Crea una variabile dedicata al calcolo del totale:
$somma = 0; // Valore iniziale per il totale.
// Esegui un ciclo su ogni elemento dell'array:
for ( $i = 0; $i < count($entrate); $i ) {
$somma += $entrate[$i];
}
// Visualizza il totale delle tue entrate:
echo $somma;
Hai utilizzato un ciclo "for" per accedere automaticamente ad ogni elemento dell'array partendo dal primo ($i = 0;) e arrivando all'ultimo (n-1) che abbiamo tradotto nella condizione di fermare il ciclo quando il contatore raggiunge il valore appena precedente al numero totale di elementi nell'array.
Ad ogni passaggio del ciclo impostato possiamo accedere all'array utilizzando come indice il contatore $i che avrà un valore valido per il set di indici del tuo array.
Esiste anche un'altro tipo di ciclo che puoi impostare in modo da evitare l'utilizzo del contatore:
foreach ( $entrate as $el ) {
$somma += $el;
}
Questo tipo di ciclo non utilizza il contatore. Ad ogni passo del ciclo il valore dell'elemento dell'array puntato viene copiato nella variabile $el. Tu puoi dunque utilizzare questa variabile al posto della notazione con il nome dell'array e l'indice.
ATTENZIONE: La variabile $el contiene una copia del valore reale dell'array. Questo tipi di ciclo è utile solamente nelle operazioni di lettura di un array.
Nel caso tu avessi bisogno di ciclare un array per modificarne i dati sei costretto ad utilizzare il ciclo "for" classico.
Manomissione del contatore di accessi:
L'esempio più scontato è la manomissione del contatore degli accessi al proprio sito web.
Qualunque programmatore alle prime armi sente la necessità di creare un contatore di accessi per il proprio sito ma resta profondamente deluso quando vede dei dati a dir poco scoraggianti.
A questo punto si trova davanti a due possibili soluzioni:
- Pagare un SEO per posizionare il sito in testa alle SERPS di Google
- Manomettere il contatore per far vedere alla gente dei numeri degni di nota.
Solitamente si opta per la seconda soluzione in quanto sicuramente meno costosa.
Tralasciamo al momento la problematica della raccolta dei dati ed utilizziamo l'array $entrate precedentemente creato fingendo che i valori corrispondano al numero di utenti per giorno. Lo scopo della nostra manomissione è modificare l'array in modo da aggiungere 20 unità ad ogni elemento... 2 accessi diventeranno così 22 ed i nostri visitatori penseranno di leggere un sito serio!
Il programmatore alle prime armi potrebbe decidere di utilizzare il ciclo "foreach" per risparmiare qualche riga di codice:
foreach ( $entrate as $el ) {
$el += 20;
}
Sicuramente avrai una gran brutta sorpresa quando noterai, utilizzando il codice per sommare i risultati, che la somma non cambia!
Diversamente, il programmatore alle prime armi che ha voglia di imparare, potrebbe utilizzare il seguente codice:
for ( $i = 0; $i < count($entrate); $i ) {
$entrate[$i] += 20;
}
Questo programmatore vedrà il risultato lievitare piacevolmente: la manomissione è riuscita!
Questa specie di parabola del buon programmatore vuole essere un esempio per farti capire a fondo la differenza esistente tra i due tipi di cicli sugli array.
Potrebbe sembrarti una problematica di poco conto... beh, ti posso assicurare che arriverà un punto in cui ti troverai alle prese con un errore inspiegabile e scoprirai di aver utilizzato una copia di variabile al posto della variabile stessa in un qualche tuo programma.
Combinare il "ciclo for" con il "ciclo foreach":
Vorrei concludere questa prima lezionicina sugli array proponendoti un buon metodo per combinare i vantaggi di entrambe i cicli. Osserva quanto segue:
foreach ( $entrate as $i => $el ) {
$entrate[$i] += 20;
}
Con questa notazione evitiamo di utilizzare la funzione count() per conteggiare il numero di elementi istanziati e calcolare di conseguenza la condizione del ciclo "for" ma possiamo egualmente disporre di un contatore per accedere direttamente all'array senza utlizzare la copia del contenuto della posizione puntata.
Si conclude dunque così la prima puntata della storia degli array. Prossimamente ti spiegherò gli array associativi che sono uno strumento utilissimo per immagazzinare dati eterogenei.
Nella prossima lezione ti spiego cosa sono gli array associativi e come usarli!

Scrivendo questo codice:
for ( $i = 0; $i < count($entrate); $i ) {
$somma = $entrate[$i];
}
non si fa altro che sovrascrivere il precedente valore memorizzato in somma con quello attuale.
Ad esempio, se nel primo giorno (i=0) entrano 10 euro allora $somma=10; se nel secondo giorno entrano altre 20 euro, la variabile somma dovrebbe essere incrementata di 20, quindi dovrebbe contenere il valore 30. Ma se scrivo $somma=$entrate[1], non faccio altro che inserire il valore 20 in somma.
L'istruzione giusta da inserire nel corpo del ciclo for, dovrebbe essere $somma= $somma + $entrate[$i];
oppure, scritto in maniera più sintetica: $somma += entrate[$i];
Saluti