Sunteți pe pagina 1din 5

Cicluri si structuri repetitive in PHP

Ciclurile (buclele) sunt folosite atunci cand dorim sa executam de mai multe ori un bloc (ex: parcurgerea unui vector). while - verifica o conditie si daca aceasta este adevarata executa blocul de dupa conditie. Pentru ca while verifica o conditie la inceput, ciclul este cu test initial. Ex: $i=5; while ($i>=0) {echo $i--;} do while executa blocul de dupa do, urmand ca la sfarsitul blocului sa se evalueze conditia, astfel fiind un ciclu cu test final. Este de preferat sa folositi do while atunci cand doriti ca un bloc sa se execute de minim o data. Ex: $i=5; do {echo $i--;} while ($i>=0); Daca in primul exemplu (while) am fi avut un i negativ ciclul nu ar fi afisat nimic, in schimb la al doilea exemplu (do while) ar fi afisat valoarea lui i dupa care nu ar mai fi inceput iteratia urmatoare. Aplicatie : Vrem sa verificam daca un numar este prim sau nu. <?php $nr=15; $impartit=2; do { $rest=$nr%$impartit; $impartit++; } while ($rest!=0 && $impartit<$nr); if ($impartit<$nr || $nr==0) echo Numarul NU este prim!; else echo Numarul este prim !; ?> for este un ciclu cu intitializare de parametru si cu test initial. Este folosit acolo unde se doreste control total asupra numarului de iteratii (vectori). Ex: for ($contor=1;$contor<=10;$contor++) echo $contor./; Rezultatul va fi : 1/2/3/4/5/6/7/8/9/10/ Remarcam claritatea cu care se poate controla numarul de iteratii (de 10 ori).

Acelasi lucru l-am fi putut scrie cu ajutorul unei bucle while : Ex: $contor=0; while ($contor<10) {$contor++; echo $contor./;}; De cate ori s-ar fi executat aceasta bucla ? De 10 ori, pornind cu un contor de la 0, pe care il incrementam inainte de a-i afisa valoarea. Structuri repetitive (vectori) reprezinta un set de variabile cu acelasi nume, dar un index diferit. Fiecare membru al unui vector este numit element. Diferentierea dintre elemente se face cu ajutorul parantezelor patrate [] in mijlocul carora este un index, ce poate fi de tip numeric sau (spre deosebire de limbajul C++) un string. Ex: <? //rezultatele obtinute la o extragere 6/49 $numar[1]=15;$numar[2]=7;$numar[3]=13; $numar[4]=44;$numar[5]=9;$numar[6]=21; //parcurgerea si afisarea rezultatelor for ($i=1;$i<=6;$i++) echo $numar[$i]./; //date despre persoane - matrice $date[1][nume]=Ion; $date[1][prenume]=Costin; $date[1][varsta]=30; $date[2][nume]=Hagi; $date[2][prenume]=Gheorghe; $date[2][varsta]=38; $date[3][nume]=Pop; $date[3][prenume]=Vasile; $date[3][varsta]=19; //parcurgerea si afisarea datelor for ($i=1;$i<=3;$i++) { echo Nume:. $date[$i][nume].<br>; echo Prenume:. $date[$i][prenume].<br>; echo Varsta:. $date[$i][varsta].<br>; } ?>

Pentru a afla numarul de elemente al unui vector putem folosi functia count(), ce admite ca parametru vectorul pentru care calculam numarul de elemente. Ex: //parcurgerea si afisarea datelor for ($i=1;$i<=count($date);$i++) { echo Nume:. $date[$i][nume].<br>; echo Prenume:. $date[$i][prenume].<br>; echo Varsta:. $date[$i][varsta].<br>; } Initializarea vectorilor se mai poate face folosind functia array(). Ex: $orase=array(Bucuresti,Constanta,Iasi); //automat se va crea indexul pornind de la 0 for ($i=0;$i<count($orase);$i++) echo $orase[$i]; //daca dorim ca indexul sa plece de la alt numar $orase=array(1=>Bucuresti,2=>Constanta,3=>Iasi); for ($i=1;$i<=count($orase);$i++) echo $orase[$i]; //index de tip string $orase=array(bu=>Bucuresti,ct=>Constanta,is=>Iasi); //parcurgerea urmatoare nu va avea nici un sens for ($i=1;$i<=count($orase);$i++) echo $orase[$i]; //in locul ei se poate parcurge vectorul utilizand functia foreach() foreach ($orase as $valoarecurenta) echo $valoarecurenta./; Daca avem un vector initializat sub forma : <? $date=array(1=>"unu",30=>"doi","aa"=>"text"); ?> Nu am putea face nimic cu o bucla standard, ci doar cu foreach(); Vom folosi functia next() pentru a pozitiona pointerul pe inregistrarea urmatoare si functia prev() pe cea dinainte si vom afisa folosindu-ne de functia key() ce returneaza indexul curent. <? $date=array(1=>"unu",30=>"doi","aa"=>"text"); echo $date[key($date)]; next($date); next($date); echo $date[key($date)]; prev($date); echo $date[key($date)]; ?>

Ultima varianta de citire a vectorilor indexati non-secvential este folosind functiile list() si each(). while(list($index,$element))= each ($date){ echo<br>$index-$element; }

Sortarea vectorilor Functia sort() este cea mai des folosita. Ex: $orase=array(zalau,constanta,iasi,bucuresti); //afisare for($i=0;$i<count($orase);$i++) echo $orase[$i]./; //rezulatul va fi afisat in ordinea definirii sort($orase); //afisare dupa sortare for($i=0;$i<count($orase);$i++) echo $orase[$i]./; Functia rsort() sorteaza descrescator un vector (invers decat sort()). Functia asort() sorteaza crescator un vector pastrand relatia element->index. Ex: $orase=array(bu=>bucuresti,is=>iasi,ct=>constanta); asort($orase); //afisare foreach ($orase as $val) echo $val./; //in exemplul precedent (sort) la o afisare de forma echo $orase[is]; //se pierdea indexul, astfel ca la afisare ar fi scris constanta in loc de iasi. Functia arsort() sorteaza descrescator un vector pastrand relatia element->index. Functia ksort() sorteaza crescator un vector, dupa valoarea indexului, nu al elementelor. Ex: $orase=array(bu=>bucuresti,is=>iasi,ct=>constanta); ksort($orase); //afisare foreach ($orase as $val) echo $val./; implode() si explode() In cazul in care avem un vector si dorim ca toate elementele sale sa le punem intrun string putem scrie :

Ex: <? $v=array(ion,matei,gheorghe); foreach ($v as $val) $string.=$val.,; //am folosit virgula ca delimitator ?> Sau putem apela la functia implode() astfel : <? $v=array(ion,matei,gheorghe); $string=implode(,,$v); //in care virgula dintre ghilimele este de asemenea delimitator ?> Inversa acestei functii este explode(), care transforma un string in care cuvintele cheie sunt delimitate dupa un semn distinct intr-un vector al carui elemente sunt cuvintele cheie, dupa cum urmeaza: Ex: <? $string=ion,matei,gheorghe; $v=explode(,,$string); //afisarea se face standard foreach ($v as $val) echo $val.<br>; ?>