Invata PHPcu punctsivirgula.ro

C O N T I N U T
Tutorial PHP in limba romana.

Explicatii, exemple si aplicatii in PHP pentru incepatori. Tutorial cu scripturi PHP


Operatii cu variabile. Structuri repetitive

O structura repetitiva este o secventa de cod ce permite realizarea repetata a aceleiasi operatii de un anumit numar de ori. O structura repetitiva este definita de 2 elemente: operatia care este executata si conditia de oprire a executiei. In unele cazuri se cunoaste si numarul de executii.

Iata cateva aplicatii care implementeaza anumite tipuri de structuri in PHP:


Structura repetitiva FOR    3 ! 

Se foloseste atunci cand se cunoaste dinainte numarul de repetitii (numarul de pasi ce se vor executa). Are urmatoarea sintaxa:

for( [instructiune] , [conditie], [instructiune2] ) {   [instructiune3]  } 
unde:

  • [instructiune1] este o instructiune de executat la inceput
  • [conditie] este o expresie care daca este evaluata ca adevarata va determina repetarea ciclului - este denumita generic conditia de repetare
  • [instructiune2] se va executa la fiecare pas al repetarii
  • [instructiune3] reprezinta operatia efectiva care se repeta in cadrul FOR-ului

In general, [instructiune1] este o expresie de initializare de forma $i = 1, conditia de repetare este de forma $i <= numarul de pasi si [instructiune2] este o expresie de incrementare $i++.

for( $i = 1; $i <= $x; $i++) {  /* operatii */ }
In limbaj natural, intructiunea se traduce prin "plecand de la $i = 1, executa operatia si creste-l pe $i cu o unitate; apoi repeta totul atat timp cat $i <= $x

De retinut: instructiunea din cadrul for-ului se executa doar daca expresia (conditia) este adevarata, deci pot exista situatii cand expresia este falsa si [instructiune3] nu se executa niciodata. Exemplu:

for( $i = 0; $i > 10; $i++ ) {
	echo 'Aceasta instructiune nu se executa niciodata';
}
Guwee a spus Gresala (cred) - 26.07.2010

for( $i = 0; $i > 10; $i++ ) {
echo 'Aceasta instructiune nu se executa niciodata';
}
la inceput i este 0
dupaia verifica daca e mai mare decat 10 ... daca e mai mare afiseaza : "Aceasta instructiune etc etc etc..."
daca nu... mareste pe i ...
i devine 1 ...
si tot asa pana cand i ajunge peste 10 si o sa tot afiseze aia la infinit
sau nu afiseaza deloc pt k e o executie infinita...
nu stiu exact daca asa e dar o sa verific...imi cer scz dak nu este asa

Piny a spus @Guwee - 08.08.2010

De fapt este perfect corect. Atunci cand este evaluata conditia, in cazul in care aceasta nu este indeplinita, "for-ul" se opreste. Daca conditia nu este indeplinita de la inceput, nu va fi afisat nimic.

"For-ul" va functiona atata timp cat conditia este indeplinita.

Ygrex a spus Exemplu corect, dar e greu de inteles ))) - 13.08.2011

Piny ai expus corect ))) dar e mai usor de lamurit exemplu de sus prin conditia pusa )) $i>10.
Nu $i nu este mai mare ca 10, din acest motiv echo nu va fi aplicat. Daca $i ar avea valoarea 11 atunci ar fi un ciclu infinit si dupa fiecare $i++ va fi aplicat echo in codul infinit.


Adauga un comentariu la aceasta sectiune.

 


Aplicatie: sa se defineasca un vector cu x elemente, fiecare element avand valori de forma "php1", "php2", "php3" ...    9 ! 

$vector = array();
$x = 10;
 
# operatia: definirea si initializarea unui element al vectorului
# conditia de continuare: nu s-au efectuat inca $x repetari
# nota: in acest caz cunoastem numarul de repetari, dat de variabila $x
 
for( $i = 1; $i <= $x; $i++) { 
	# intre paranteze se specifica expresia de initializare $i = 1
	# conditia de continuare $i <= $x si o expresie de iterare $i++
 
	$vector[ $i ] = "php$i"; # aceasta este operatia
}
 
print_r( $vector );
 
/*afiseaza:
Array
(
    [1] => php1
    [2] => php2
    [3] => php3
    [4] => php4
    [5] => php5
    [6] => php6
    [7] => php7
    [8] => php8
    [9] => php9
    [10] => php10
)
*/
Mihai a spus Nu inteleg - 23.11.2009

Nu inteleg ce inseamna $vector[ $i ]
mai exact asta: [ $i ]
adica $vector ia valoarea $i ?

Alex a spus mai Mihai - 18.12.2009

variabila $i ia valori de la 1 la 10 in ciclarea "for"
iar $vector[$i] este elementul $i al vectorului
ex: daca $i=3, $vector[$i] este de fspt $vector[3] si are valoarea "php3"

Alexandru a spus Explicatie vectori - 18.12.2009

Mihai, gandeste-te la un vector ca la o cutie cu mai multe compartimente. Fiecare element al vectorului este un compartiment diferit ce poate contine informatia lui.

Per total, vectorul este o singura variabila (o singura entitate - cutia), dar care contine o colectie de elemente (mai multe valori diferite - compartimentele cutiei).

Un vector nu poate fi folosit ca atare (adica nu poti sa scrii <?php print $vector; ?>). Poti in schimb sa folosesti elementele unui vector ca si cand ar fi variabile de sine statatoare.

Pentru a accesa un element al unui vector (informatia dintr-un compartiment anume), trebuie sa specifici numarul compartimentului. In PHP, lucrul asta se face cu o notatie speciala, parantezele drepte [ ]. Cand spun $vector[1] ma refer la primul compartiment din cutia $vector.

Ce a spus Alex mai sus este corect si foarte bine pus: $vector[$i] inseamna compartimentul cu nr $i din cutia $vector.

Avram ionela daniela a spus f bine - 19.02.2010

foarte buna explicatia alexandru

Mihai a spus punct si virgula - 10.07.2010

Dupa instructiunea for nu trebuie pus punct si virgula? Cum se face ca merge si fara?

Piny a spus @Mihai - 08.08.2010

Nu trebuie. "For" este o functie. Nu ar avea rost sa se puna [punct si virgula] dupa ea. ";" este folosit pt a indica sfarsitul unei instructiuni (exemplu $i=$i+5;). Spre deosebire de de exemplul meu, o functie este are inceputul si sfarsitul bine definite.

Alexandru a spus @Mihai si @Piny - 09.08.2010

De fapt, o explicatie mai riguroasa este ca acel "for" este un bloc (una sau mai multe instructiuni delimitate de acolade), iar dupa un bloc de instructiuni nu este necesar sa punem punct si virgula.

Myhai a spus neatentie - 16.04.2011

Ca sa apara ce ai scris u cred ca trebuia ceva de genul:
$vector[ $i ] = "php$i<br />";
NU styu prea bine php dar asa cred ca trebuie sa arate.

myhai a spus intrebare??? - 16.04.2011

echo nu poate citi in vector???
am observat ca folosind echo in loc de print_r afiseaza numai array.


Adauga un comentariu la aceasta sectiune.

 


Aplicatie: sa se afiseze un element de tip select cu valori de la 1 la 100    2 ! 

$end = 100;
 
# operatia: afisarea unui element de tip <option>
# conditia de oprire: s-au efectuat $end repetari
# nota: ca zi in cazul anterior se cunoaste numarul de repetari
 
print "<select>";
for( $i = 1; $i <= $end; $i++ ) {
	print "<option value=\"$i\">$i</option>\n";
}
print "</select>";
Rezultatul codului de mai sus este urmatorul:
Myhai a spus mica atentie - 16.04.2011

Aici merge si cu echo in loc de print,mie asa imi este mai usor.
P.S.-Cred ca dupa castua select trebuia sa ai si cifra 100 care la tine nu e afisata.:)

Myhai a spus greseala mea - 16.04.2011

De fapt e bine scz.:D


Adauga un comentariu la aceasta sectiune.

 


Structura repetitiva WHILE    0 ! 

Instructiunea while este folosita atunci cand nu se cunoaste dinainte numarul de executii. Are o forma mai intuitiva decat for si multe persoane o considera mai usor de folosit. Diferenta dintre while si for este aceea ca prima este mai generala si mai flexibila. Se poate chiar afirma ca for este o situatie particulara a unei structuri while. Sintaxa este urmatoarea:

while( [conditie] ) {  [instructiune]  }

Este probabil usor de inteles ca [instructiune] se executa atata timp cat [conditie] este adevarata. La fel ca si la for, exista posibilitatea ca instructiunea sa nu fie executata niciodata.

De retinut: este de datoria programatorului sa includa in [instructiune] codul necesar iesirii din bucla. Daca acest lucru nu se realizeaza, instructiunea se va executa la nesfarsit. Exemplu:

$continua = true;
while( $continua == true ) {
	echo 'La nesfarsit', '<br>';
}
echo 'Aici nu se mai ajunge';

Varianta corecta a exemplului de mai sus este urmatoarea:

$continua = true;
while( $continua == true ) {
	echo 'La nesfarsit', '<br>';
	$continua = false; # modific variabila de testare a conditiei
}
echo 'Acum se ajunge aici';

Nimic de afisat.


Adauga un comentariu la aceasta sectiune.

 


Aplicatie: se da un vector. Sa se parcurga vectorul pana cand se intalneste valoarea 0    3 ! 

$vector = array( 3, 4, 5, 1, 2, 9, 76, 42, 2, 9, 6, 0, 4, 1, 10 );
 
# operatia: se verifica daca elementul curent al vectorului este 0
# conditia de oprire: elementul curent este 0 sau s-a ajuns la finalul vectorului
# nota: desi putem afla numarul de elemente al vectorului, in functie de care
# putem hotari numarul maxim de repetari, se va folosi o alta sctructura repetitiva
 
 
$gasit = false;
$pozitie = 0; // plecam de la primul element
 
// parcurgem vectorul pana cand ajungem la final sau gasim valoarea 0
while( !$gasit ) {
	// verific daca elementul curent (initial primul element) este 0
	if( $vector[ $pozitie ] == 0 ) {
		$gasit = true;
		print "Am gasit 0 pe pozitia $pozitie";
	}
 
	// trec la pozitia urmatoare pentru verificare
	$pozitie++;
	// spre deosebire de "for" incrementarea trebuie realizata explicit
 
	// verific daca am ajuns la sfarsitul verctorului
	if( $pozitie == count( $vector ) ) {
		$gasit = true; // ca sa nu mai repete
		print "Nu am gasit 0 in vectorul asta";
	}
}
 
# in limbaj natural, instructiunea while se poate transpune in "cat timp
# conditia este indeplinita executa operatiunea"
 
/* afiseaza 
Am gasit 0 pe pozitia 11 
*/
Exemplul de mai sus este dat pentru a intelege cand si de ce se foloseste 'while'. Toata verificarea se poate face mult mai rapid folosind o functie oferita de limbaj: array_search.
// alternativa
$vector = array( 3, 4, 5, 1, 2, 9, 76, 42, 2, 9, 6, 0, 4, 1, 10 );
 
$pozitie = array_search(0, $vector );
 
if( $pozitie === false ) print "Nu am gasit 0 in vectorul asta";
else print "Am gasit 0 pe pozitia $pozitie";
Mihai a spus Ce inseamna - 23.11.2009

Ce inseamna !$gasit ? cu ! in fata..

hoinar a spus inseamna negatie - 26.03.2010

Daca nu este satisfacuta conditia se executa ce urmeaza intre acolade.

Piny a spus Gresit - 08.08.2010

! pus inaintea unei conditii si da acesteia valoarea de false. Adica:

while(!$gasit) = Pana ¢and($gasit e fals)

Nota: while = Pana Cand


Adauga un comentariu la aceasta sectiune.

 


Structura repetitiva DO-WHILE    0 ! 

O alta structura repetitiva este "do... while". Diferenta este ca verificarea de face la final, dupa ce se executa cel putin o data secventa de cod. O traducere in cuvintele noastre ar fi: "executa secventa si cat timp conditia este adevarata, repet-o".
Exemplul de mai sus, rescris ar arata asa:
$vector = array( 3, 4, 5, 1, 2, 9, 76, 42, 2, 9, 6, 0, 4, 1, 10 );
 
# operatia: se verifica daca elementul curent al vectorului este 0
# conditia de oprire: elementul curent este 0 sau s-a ajuns la finalul vectorului
# nota: desi putem afla numarul de elemente al vectorului, in functie de care
# putem hotari numarul maxim de repetari, se va folosi o alta sctructura repetitiva
 
 
$pozitie = 0; // plecam de la primul element
 
// parcurgem vectorul pana cand ajungem la final sau gasim valoarea 0
do {
	// presupun mai intai ca elementul e gasit
	$gasit = true;
 
	// verific daca elementul curent (initial primul element) este diferit de 0
	// cu alte cuvinte, deocamdata nu am gasit ce caut, deci merg mai departe
	if( $vector[ $pozitie ] != 0 ) {
		$gasit = false;
 
		// trec la pozitia urmatoare pentru verificare
		$pozitie++;
	}
 
 
} while ( !$gasit && $pozitie < count( $vector ) );
 
if( $gasit ) print "Am gasit 0 pe pozitia $pozitie";
else print "Nu am gasit 0 in vectorul asta";
 
/* afiseaza 
Am gasit 0 pe pozitia 11 
*/

Nimic de afisat.


Adauga un comentariu la aceasta sectiune.

 


Iterarea cu foreach()    0 ! 

PHP ofera o structura repetitiva foarte puternica si des folosita: foreach. Aceasta permite iterarea prin toate elementele unui vector. Pot fi folositi si vectori simpli si asociativi.

Spre deosebire de celelalte instructiuni, pentru foreach nu trebuie specificata explicit o conditie de oprire, fiind de datoria interpretorului PHP sa opreasca iterarea atunci cand s-a ajuns la finalul vectorului.

$vector = array( 3, 4, 5, 1, 2, 9, 76, 42, 2, 9, 6, 0, 4, 1, 10 );
 
# operatia: afisarea elementului curent al vectorului
# conditia de oprire: s-a ajuns la finalul vectorului (implicita)
 
foreach( $vector as $element) {
	print "$element ";
}
// afiseaza: 3 4 5 1 2 9 76 42 2 9 6 0 4 1 10
 
 
// vector asociativ
$zile = array(
	'luni' => 'Mo',
	'marti' => 'Tu',
	'miercuri' => 'We',
	'joi' => 'Th',
	'vineri' => 'Fr',
	'sambata' => 'Sa',
	'duminica' => 'Su'
);
foreach( $zile as $zi) {
	print "$zi ";
}
// afiseaza Mo Tu We Th Fr Sa Su
 
 
foreach( $zile as $rom => $eng) {
	print "$eng inseamna $rom <br />";
}
 
/* afiseaza 
Mo inseamna luni
Tu inseamna marti
We inseamna miercuri
Th inseamna joi
Fr inseamna vineri
Sa inseamna sambata
Su inseamna duminica
*/

Nimic de afisat.


Adauga un comentariu la aceasta sectiune.