Cicli e Array in PHP


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:

  1. Ciclo while;
  2. Ciclo do while;
  3. 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 ArrayPartiamo 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:ciaooreblaCome 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 ArrayUna 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.

fonte: http://www.orebla.it/module.php?n=php_3#while

Commenti

Post popolari in questo blog

Simulazioni di reti (con Cisco Packet Tracer)

Esercizi sulla rappresentazione della virgola mobile IEEE 754 (Floating Point)