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 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 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","
//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=>"
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","
//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
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>";
?>
|