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
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'; }
Aplicatie: sa se defineasca un vector cu x elemente, fiecare element avand valori de forma "php1", "php2", "php3" ...
$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 ) */
Nu inteleg ce inseamna $vector[ $i ]
mai exact asta: [ $i ]
adica $vector ia valoarea $i ?
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"
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.
foarte buna explicatia alexandru
Dupa instructiunea for nu trebuie pus punct si virgula? Cum se face ca merge si fara?
Adauga un comentariu la aceasta sectiune.
Aplicatie: sa se afiseze un element de tip select cu valori de la 1 la 100
$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:
Structura repetitiva WHILE
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';
Aplicatie: se da un vector. Sa se parcurga vectorul pana cand se intalneste valoarea 0
$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";
Ce inseamna !$gasit ? cu ! in fata..
Daca nu este satisfacuta conditia se executa ce urmeaza intre acolade.
Adauga un comentariu la aceasta sectiune.
Iterarea
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 */
Iterarea
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 */
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
Adauga un comentariu la aceasta sectiune.