II. Notiuni de baza7. Exemple cu structuri repetitive

Moderatori: Moderators, Founder

Mesaj

Avatar utilizator
CEO
Posts
3802
Aplicatii - Structuri repetitive

Mai jos sunt prezentate cateva aplicatii legate de structurile repetitive. Sunt mai degraba portiuni de cod, care nu vor face decat sa va ajute sa va obisnuiti cu particularitatile limbajului PHP. Comentariile sunt binevenite.
----------------------------------

Cum definesc un vector ale carui elemente sa aiba valori incrementale?

Cod: Selectaţi tot

/* vrem sa construim un vector in care fiecare element sa fie initializat * cu o valoare dinamica si incrementala; avem, asadar, o aceeasi operatie * care se repeta de mai multe ori, motiv pentru care vom folosi un for */ $vector = array(); $n = 10; # operatia repetitiva: definirea si initializarea unui element al vectorului # conditia de continuare: inca nu s-au efectuat $n repetari # nota: in acest caz cunoastem numarul de repetari, dat de variabila $n for( $i = 1; $i <= $n; $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 ) */
-----------------------------------------------------
Cum afisez o lista de link-uri?

Cod: Selectaţi tot

cu valori dinamice # conditia de continuare: inca nu s-au efectuat $n repetari # va trebui sa avem lista de link-uri definita intr-un vector. $links = array( 'www.punctsivirgula.ro', 'php.punctsivirgula.ro', 'php.punctsivirgula.ro?despre', 'php.punctsivirgula.ro?legal' ); # determin lungimea listei $n = count( $links ); # avand lungimea, folosesc o structura for pentru a afisa lista echo '
'; for( $i = 0; $i < $n; $i++ ) { echo << {$links[ $i ]} LINK; } echo '
'; ?> Rezultat:
   – www.punctsivirgula.ro
   – php.punctsivirgula.ro
   – php.punctsivirgula.ro?despre
   – php.punctsivirgula.ro?legal
--------------------------------------------------
Cum afisez un element de tip select cu valori de la 1 la 100?

Cod: Selectaţi tot

/* similar exemplului anterior */ $end = 100; # operatia repetitiva: afisarea unui element de tip# conditia de continuare: inca nu s-au efectuat $end repetari # nota: ca zi in cazul anterior se cunoaste numarul de repetari print ""; for( $i = 1; $i <= $end; $i++ ) { print "$i\n"; } print "";Rezultatul codului de mai sus este urmatorul:
-------------------------------------------------
Cum afisez un element de tip select cu toate tarile?

Cod: Selectaţi tot

'Afghanistan', 'AL'=>'Albania', 'DZ'=>'Algeria', 'AS'=>'American Samoa', 'AD'=>'Andorra', 'AO'=>'Angola', 'AI'=>'Anguilla', 'AQ'=>'Antarctica', 'AG'=>'Antigua And Barbuda', 'AR'=>'Argentina', 'AM'=>'Armenia', /* ... */ 'WS'=>'Western Samoa', 'YE'=>'Yemen', 'YU'=>'Yugoslavia', 'ZM'=>'Zambia', 'ZW'=>'Zimbabwe' ); # avand un array asociativ, este mai dificil sa-i accesam elementele, asa ca nu vom # mai folosi for. Vom folosi in schimb un iterator echo '
', $name, '
\n"; ?>
----------------------------------------------------------
Cum caut o valoare intr-un vector?

Cod: Selectaţi tot

/* avem un vector cu un numar necunoscut de valori; vrem sa cautam valoarea 0 * folosind o structura repetitiva */ $vector = array( 3, 4, 5, 1, 2, 9, 76, 42, 2, 9, 6, 0, 4, 1, 10 ); # operatia repetitiva: 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 determina numarul maxim de repetari, se va folosi structura while $gasit = false; $pozitie = 0; // plecam de la primul element // parcurgem vectorul pana cand ajungem la final sau gasim valoarea 0 while( !$gasit ) { // echivalent cu while( $gasit == false ) // 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";
-----------------------------------------
Cum validez mai multe email-uri introduse de un utilizator?

Cod: Selectaţi tot

'; //break; /* pot folosi break dar este inutil pentru ca se va iesi oricum din bucla while datorita variabilei $gasitInvalid care e true */ } $i++; # cresc pe $i } # daca s-a ajuns la sfarsitul sirului de email-uri si $gasitInvalid este tot false # inseamna ca nu exista nici un element invalid if( !$gasitInvalid ) echo 'Toate email-urile sunt valide!
'; ?>
Rezultat:

Am gasit un email invalid: zzz
Nota: se putea folosi si structura repetitiva for pentru ca se cunosteau dinainte numarul de pasi ce trebuiau efectuati. In schimb, folosind aceasta implementare, atunci cand se gaseste un email valid se opreste executia (se iese din bucla while), asadar codul ar putea fi mai performant decat in cazul folosirii for.

Spre exemplu, daca avem un vector cu 15 elemente, iar pe pozitia a doua se afla un email invalid, atunci executia se termina dupa 2 pasi: la primul pas se verifica primul element care este valid, iar la al doilea, gasindu-se un email invalid se iese din ciclul while (din cauza ca $gasitInvalid nu mai este false).
========================
CONTACT : diliulro@yahoo.com
========================
Închis