Imparare il PHP: Le basi
autore: Orebla
xx/xx/xx
Cicli e Array:
Bene per prima cosa spieghiamo a cosa
servono i cicli (parleremo poi degli array), quando un programmatore ha
bisogno di eseguire un istruzione decine, centinaia o migliaia di volte
prima o poi si sbaglia perché purtroppo siamo esseri umani. Quindi per
non fare errori i linguaggi di programmazione ci vengono in aiuto. Si
perché se un computer esegue la stessa cosa anche per un miliardo di
volte se lo fa bene la prima lo fa bene sempre.
Ora esistono 3 tipi di cicli:
-
Ciclo while;
-
Ciclo do while;
-
Ciclo for;
3.1.2 Ciclo While
Iniziamo con il descrivere il
funzionamento del ciclo while, questo perché è uno dei più semplici.
Spieghiamolo ora a parole:
while (una condizione è vera)
{
eseguiamo questa riga;
}
Ora avete visto come è semplice
questo ciclo, ci basta mettere tra parentesi la condizione e se questa è
vera verrà eseguito la riga tra parentesi graffe. Non so se avete notato
che ho messo il punto e virgola (;) solo nella riga in mezzo, bene questi
sono uno dei pochi casi in cui non ci vogliono i punti e virgola (;).
Per chi conosce il ciclo if noterà
delle somiglianze. Facciamo un esempio:
<?
$var=0;
While ($var >2)
{
echo "Ciao";
}
?>
Questo ciclo scriverà
"Ciao" (senza virgolette) fino a che $var non sarà uguale o
maggiore a 2. Ora questo ciclo andrà all’infinito perché la variabile
$var è uguale a 0 e non sarà mai uguale o maggiore a 2. State attenti
quando usate dei cicli per i vostri programmi perché se incappate in
questi errori vi si bloccherà il server e di conseguenza il PC,
ovviamente i nuovi web-server hanno un tempo limite e se dopo questo non
hanno finito il ciclo lo interrompono (di solito sono 30 secondi). Come
fare per far in modo che non si crei un loop infinitive? Basta aggiungere
una riga che incrementi la variabile:
<?
$var=0;
while($var>2)
{
echo "Ciao";
$var = $var+1;
}
?>
Bene così il nostro script scriverà
2 volte Ciao poi si fermerà. Si perché quando la condizione nella
parentesi diventa falsa il ciclo while esegue la riga successiva alla
chiusura delle parentesi graffe, nel nostro caso non eseguirà niente e si
fermerà.
3.1.3 Ciclo do while
Il ciclo do while è simile al ciclo
while con un solo particolare di differenza, la condizione viene
verificata alla fine del ciclo e non all’inizio. Quindi lo script viene
eseguito almeno una volta, poi si verifica la condizione, facciamo un
esempio:
<?
do
{
eseguiamo questa riga;
} while (la condizione è vera); se
è vera ricominciamo il ciclo
?>
Questo vi spiega chiaramente il ciclo
do while, questo è consigliato in quegli script che devono per forza
eseguire al meno una volta lo script. Ora facciamo un esempio più
realistico, questo ciclo ci torna utile quando dobbiamo verificare se un
numero è primo. Ora quand’è che un numero è primo? Quando è
divisibile solo per uno e per se stesso. Il nostro script allora devo
dividere il numero per tutti i numeri che vanno da 2 al numero stesso,
bene scriviamo il nostro script:
CODICE:
<?
do
{
$resto =
$possibilenumeroprimo%$numero;
$numero = $numero+1;
} while ($resto!=0 AND $numero<$possibilenumeroprimo);
?>
In questo script dividiamo il
possibile numero primo per i numeri che vanno da 2 al numero stesso, se
dalla divisione risulta un resto allora ripetiamo la divisione sino a che
non darà come risultato 0.
Proviamo a creare uno script un po’
più complesso, questa volta permettiamo all’utente di inserire tramite
un form di testo un numero poi il nostro script verifica se è primo,
salvatelo come numprimo.php:
CODICE:
<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=POST
ACTION="<? $PHP_SELF ?>">
Inserisci il numero da controllare:
<INPUT NAME="numero"
TYPE="text">
<br>
<br>
<INPUT TYPE=SUBMIT VALUE="Verifica
se è un numero primo">
<br>
<?
$cont=2;
$numero = $HTTP_POST_VARS[‘numero’];
do
{
$resto=$num%$cont;
$cont=$cont+1;
}while ($resto!=0 AND
$cont<$numero);
if (($cont<$numero) || ($numero==0)){
echo ("Non è un numero
primo");
}else{
echo ("Il numero è
primo");
}
?>
</FORM>
</BODY>
</HTML>
Bene ora illustriamo il funzionamento
di questo semplice script: la schermata che ci apparirà al momento dell’esecuzione
dello script (se non abbiamo fatto errori) sarà un semplice form di testo
in cui inserire il numero da verificare. Il codice per creare questo form
è in HTML quindi non ci dovrebbero essere problemi, abbiamo però
introdotto una nuova funzione (a dire il vero è una variabile) cioè
$PHP_SELF. Per chi non lo sapesse questa è una delle cosi dette
"variabili d’ambiente" cioè sono quelle variabili che se
richiamate in qualsiasi parte dello script o all’interno di qualsiasi
funzione avranno sempre quella funzione. In questo caso la variabile d’ambiente
ci restituirà il nome della pagina (esempio se salviamo questo script
come numprimo.php il suo valore sarà numprimo.php). Avrete capito
sicuramente il perché ho utilizzato questa variabile e non ho scritto
direttamente numprimo.php, l’ho fatto per rendere valido sempre lo
script, mettiamo che poi decidiamo di rinominare il file se ci
dimentichiamo di cambiare il nome della pagina non si crea nessun problema
perché ci pensa $PHP_SELF!!
Allora se analizziamo la parte in
HMTL notiamo che il form di testo prende il nome di "numero",
sarà poi questo nella parte in PHP il nome della variabile. Cioè noi
richiamiamo con la variabile $HTTP_POST_VARS i valori che ci vengono
inviati tramite l’uso del metodo POST all’interno dell’intestazione
HTTP. Si potrebbe anche usare solo $numero e in teoria il nostro codice
PHP dovrebbe riconoscerlo lo stesso, però ho avuto dei problemi su alcuni
server e perciò uso sempre $HTTP_POST_VARS.
Breve cenno sull’uso di
$HTTP_POST_VARS e $HTTP_GET_VARS: si usano semplicemente indicando tra
parentesi quadre ([]) e tra apici singoli (‘’) il nome della variabile
che vogliamo richiamare, prendendo in esempio il nostro script per
calcolare il numero primo abbiamo messo $HTTP_POST_VARS[‘numero’].
Praticamente l’$HTTP_POST_VARS è un array e al suo interno sono
presenti tutte le variabili che noi gli passiamo nell’header HTTP.
Invece per $HTTP_GET_VARS non cambia nulla, l’unica differenza è il
metodo che usiamo (spiegheremo poi la differenza tra GET e POST per chi
ancora non lo sa).
Tornando al nostro script, bene
spiegata la parte in HTML passiamo al codice PHP:
$cont=2;
$numero = $HTTP_POST_VARS[‘numero’];
qui abbiamo definito le 2 variabili
$cont e $numero, ci serviranno per calcolare il numero primo. La variabile
$cont è impostata sul due perché iniziamo a dividere per 2 non possiamo
iniziare a dividere per 1 perché tutti sapete che qualsiasi numero è
divisibile per 1.
do
{
$resto=$num%$cont;
$cont=$cont+1;
}while ($resto!=0 AND
$cont<$numero);
Ora gran parte di questo ciclo do
while lo abbiamo già spiegato prima, chiariamo solo la parte nuova dello
script che è il ciclo if:
if (($cont<$numero) || ($numero==0)){
echo ("Non è un numero
primo");
}else{
echo ("Il numero è
primo");
}
come sappiamo quando nel ciclo do
while si avvera la condizione esegue la prima riga subito successiva, in
questo caso troviamo il ciclo if, ci serve per comunicare all’utente se
il numero è primo. All’interno del ciclo if deve essere vera una delle
due condizioni (in quanto abbiamo inserito l’operatore booleano OR cioè
||), la prima condizione è che il $cont sia minore di $numero questo
perché se il numero è stato diviso esattamente per $cont allora non è
un numero primo. Seconda condizione che $numero non sia uguale a 0 ciò ci
indica che il numero non è primo, se invece nessuna di queste condizioni
è verificata significa che abbiamo un numero primo.
3.1.4 Ciclo For
Il ciclo For ci permettere di
eseguire il codice per tutte le volte che vogliamo noi, mi spiego meglio
con un esempio:
for (valore del contatore; valore che
deve avere il contatore; incrementiamo il contatore)
{
eseguiamo questa riga
}
Bene il ciclo for è molto utile
quando dobbiamo compiere una cosa più volte, vi faccio vedere il
risparmio che abbiamo usando un ciclo for invece che un while (ovviamente
in questo caso).
1.CODICE WHILE:
<?
$contatore=0;
while ($contatore=7)
{
echo "Ciao";
$contatore = $contatore+1;
}
?>
2.CODICE FOR:
<?
for ($contatore=1; $contatore=7;$contatore++)
{
echo "Ciao";
}
?>
Avete visto come si snellisce il
codice usando il ciclo for??? Ovviamente non è sempre così, perché come
dico io ad ogni ciclo il suo dovere. Ma cosa abbiamo fatto in questo
codice, semplicemente scriviamo 7 volte la parola Ciao. Un’ultima cosa
il contatore ($contatore si può chiamare come volete) si può anche
utilizzare all’interno del ciclo, per esempio scriviamo tutti i numeri
che vanno da 1 a 100;
CODICE:
<?
for ($num=1; $num<=100;$num++)
{
echo $num;
}
?>
3.2.1.1 Inizializazzione Array
Partiamo con la descrizione, cioè
cos’è un array: un array è un insieme di variabili che hanno tutte lo
stesso nome ma sono caratterizzate da un indice diverso per ognuna. Ogni
membro dell’array è chiamato elemento.
Ora mostriamo come creare un array,
che non è poi così diverso da "creare" una variabile: ci sono
2 o 3 modi per farlo.
Il primo assomiglia moltissimo a
quello delle variabili:
$esempioarray[]="valore1"
$esempioarray[]="valore2"
come vedete l’unica differenza è
che abbiamo aggiunto le parentesi quadre alla fine del nome della "pseudovariabile".
Come abbiamo già detto gli array sono caratterizzati da un indice ma
esattamente questo indice dov’è? Be l’indice è all’interno delle
parentesi quadre, o meglio in questo caso non è visualizzato perché il
PHP lo tiene in memoria. Perfarvi capire richiamiamo gli array con
echo.
CODICE:
<?
$esempio[]="ciao";
$esempio[]="prova";
$esempio[]="orebla";
echo $esempio[0];
echo $esempio[1];
?>
Bene ora salviamo lo script e lo
nominiamo array.php, al momento dell’esecuzione otterremo il seguente
output:
ciaoorebla
Come avete visto abbiamo inserito l’indice
tra parentesi quadre per scegliere l’elemento dell’array che ci
interessa, state bene attenti che l’indice inizia da 0 e non da 1.
Ricordatevelo perché esiste anche l’elemento 0 infatti noi abbiamo
dovuto inserire l’indice 0 per ottenere l’output ciao!
Parliamo degli altri metodi di creare
un array, cioè lo trattiamo come una variabile ma aggiungiamo la funzione
array(), vediamo meglio con un esempio:
$esempio = array("ciao",
"prova", "orebla");
se adesso andiamo a richiamarlo come
nell’esempio precedente otterremo lo stesso risultato.
Possiamo però crearli anche in altri
modi, cioè possiamo assegnare all’array un indice diverso non siamo
obbligati a seguire l’ordine, cioè facciamo un eempio:
$esempio[3] = "ciao";
$esempio[2] = "prova";
come avete visto il PHP si ricorda
ciò che noi abbiamo messo nell’indice 3 e 2 anche se non siamo andati
in ordine. Addirittura possiamo anche assegnare all’indice un valore non
numerico, sono i cosiddetti array associativi, facciamo un esempio:
$esempio["uno"] =
"ciao";
$esempio["due"] =
"prova";
come vedete gli indici sono
"uno" e "due" e non sono numerici, al momento della
chiamata del contenuto dell’array possiamo anche non mettere le
virgolette, cioè possiamo richiamarlo con
echo $esempio[uno]; ci
darà lo stesso risultato di
echo $esempio["uno"];.
Come abbiamo già detto prima è
possibile inserire gli array usando la "funzione" array(),
aggiungendo il fatto che si può assegnare un indice diverso per ogni
elemento otteniamo questi due esempi:
CODICE
$esempio = array(1 =>
"ciao", "prova", "orebla");
CODICE II
$esempio = array("uno"
=> "ciao", "due" => "prova",
"tre" => "orebla");
Come vedete nel primo esempio ho
aggiunto un 1=> questo indica all’array che l’indice deve iniziare
dal numero 1 e non da 0 come è di default, il secondo esempio è uguale a
quello che avevamo fatto dieci righe prima. E’ un modo molto lento, ve
lo sconsiglio, l’ho illustrato solo per informazione.
3.1.1.2 Utilizziamo gli Array
Una volta generato un array con
decine di elementi non vorremo certo richiamarli uno per uno con il
comando echo!! A questo punto ci vengono in contro i cicli, prima
spiegati.
CODICE:
<?
$alfabeto = array(1 =>
"a", "b", "c", "d", "e",
"f" ,"g" ,"h", "i", "l",
"m", "n", "o", "p", "q",
"r", "s", "t" ,"u", "v",
"z");
for ($cont=1; $cont<22; $cont++)
{
echo "<br>$alfabeto[$cont]";
}
?>
Come vedete queste semplici 3 righe
di codice ci permettono di ottenere tutti gli elementi del nostro array,
ovviamente avendo indicizzato l’array partendo da 1, nel ciclo partiamo
da 1.