Sunteți pe pagina 1din 6

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)

do

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
while atunci cand doriti ca un bloc sa se execute de minim o data.
Ex:
$i=5;
do 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 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) ;

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++)
?>

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++)
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)
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 intr-un
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>";
?>

S-ar putea să vă placă și