Part. 2 - Creare tabel HTML cu date din Array
- Parcurgerea unui Array asociativ
- Lucrul cu functii lista
- Sortarea matricelor
- Transformarea matricelor in siruri si a sirurilor in matrice (array)
1. Parcurgerea unui Array asociativ
In lectia precedenta a fost prezentata modalitatea de citire a elementelor din matrice secventiala - adica matrice ale caror chei sunt numere intregi consecutive.
Tablourile de date pot avea si elemente ale caror chei pot fi numere aleatoare sau chiar cuvinte, aceste matrici se numesc "matrici asociative" (non-secventiale).
Pentru citirea datelor dintr-un Array asociativ se poate folosi instructiunea foreach care simplifica parcurgerile de acest gen.
Instructiunea foreach are urmatoarea forma generala:
- foreach (tablou as $cheie => $valoare) {corp}
- Instructiunea parcurge în mod iterativ (
element cu element) tabloul denumit "tablou", stabilind valori adecvate pentru valorile variabilelor "$cheie" si "$valoare" aferente fiecarui element al tabloului.
Iata un exemplu simplu:
<?php
$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");
foreach ($limbaje as $index => $limbaj) { // parcurge iterativ tabloul
echo "<br />$index =>$limbaj";
}
?>
- Remarcati ca instructiunea
echo face pur si simplu referire la valorile variabilelor $index si $limbaj, carora li se atribuie în mod automat valorile cheii, respectiv elementului curent.
10 =>Perl
20 =>PHP
21 =>Python
Cateodata este nevoie sa parcurgem datele unui tablou multi-dimensional.
Pentru a parcurge matricea, folositi instructiuni
foreach imbricate:
Pentru a invata modul de parcurgere a unui Array multi-dimensional, sa studiem urmatorul exemplu:
<?php
$date = array("PHP"=>array("simplu", "popular"), "Python"=>array("simplu", "nepopular"), "Pearl"=>array("dificil", "popular"));
foreach ($date as $limbaj => $valoare) {
foreach($valoare as $cheie =>$caracteristica) {
echo "<br />$limbaj : $caracteristica";
}
}
?>
- Instructiunea
foreach exterioara obtine cate un Array asociat cu fiecare limbaj; a doua instructiune
foreach, interioara, parcurge fiecare Array obtinut de prima instructiune
foreach.
Iata rezultatul:
PHP : simplu
PHP : popular
Python : simplu
Python : nepopular
Pearl : dificil
Pearl : popular
2. Lucrul cu functii lista
În afara de modalitatile de parcurgere a matricelor, PHP ofera numeroase functii care va permit traversarea tablourilor, deplasându-va înainte sau înapoi prin elementele acestuia.
Prima dintre aceste functii este current(), care returneaza valoarea curenta a tabloului. Functia current() foloseste un pointer intern de tablou, pe care PHP îl creeaza pentru fiecare tablou. (Când creati un tablou, pointerul intern de tablou este configurat astfel încât sa faca referire la primul element al tabloului).
Functiile next() si prev() modifica pointerul intern al tabloului si se pot folosi alaturi de functia current() pentru a parcurge un tablou.
Functia next(), asa cum îi arata si numele, modifica pointerul intern al tabloului astfel încât acesta sa faca referire la urmatorul element, în timp ce functia prev() modifica pointerul intern al tabloului astfel încât acesta sa faca referire la elementul anterior.
Iata un exemplu care prezinta modul de operare al functiilor mentionate:
<?php
$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");
$curent = current($limbaje);
echo "<br />functia current() a returnat $curent";
$urmator = next($limbaje);
echo "<br />functia next() a returnat $urmator";
$urmator = next($limbaje);
echo "<br />functia next() a returnat $urmator";
$anterior = prev($limbaje);
echo "<br />functia prev() a returnat $anterior";
?>
Iata datele de iesire ale exemplului:
functia current() a returnat Perl
functia next() a returnat PHP
functia next() a returnat Python
functia prev() a returnat PHP
Observati modul în care sunt utilizate functiile prev() si next() pentru deplasarea înapoi, respectiv înainte, în interiorul tabloului.
3. Functia key()
Functia key() este corelata cu functia current(). Daca functia current() returneaza valoarea asociata elementului curent, functia key() returneaza cheia asociata elementului curent.
Iata un exemplu care ilustreaza modul de operare al acestei functii:
<?php
$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");
$curent = current($limbaje);
$cheie = key($limbaje);
echo "<br />functia current() a returnat $curent";
echo "<br />functia key() a returnat $cheie";
?>
Iata datele de iesire ale exemplului:
functia key() a returnat 10
4. Functia each()
O alta functie utila în parcurgerea tablourilor este each().
Functia each() returneaza perechea "cheie-valoare" care se afla la pozitia curenta din tabloul specificat. Perechea "cheie-valoare" este returnata sub forma unui Array asociativ cu patru elemente, dupa cum urmeaza:
Cheie |
Valoare |
0 |
- Componenta cheie a perechii cheie-valoare curenta |
1 |
- Componenta valoare a perechii cheie-valoare curenta |
key |
- Componenta cheie a perechii cheie-valoare curenta |
value |
- Componenta valoare a perechii cheie-valoare curenta |
- Observati ca puteti folosi valoarea cheie "0" sau "key" pentru a obtine accesul la componenta cheie a perechii "cheie-valoare"; similar, puteti folosi valoarea cheie "1" sau "value" pentru a obtine accesul la componenta valoare a perechii "cheie-valoare".
Pentru a intelege mai bine cum se foloseste functia
each(), studiati exemplul urmator:
<?php
$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");
$fiecare = each($limbaje);
$zero = $fiecare[0];
$unu = $fiecare[1];
$cheie = $fiecare['key’];
$valoare = $fiecare['value’];
echo "<br />zero=$zero";
echo "<br />unu=$unu";
echo "<br />cheie=$cheie";
echo "<br />valoare=$valoare";
?>
Iata datele de iesire ale exemplului:
zero=10
unu=Perl
cheie=10
valoare=Perl
5. Functia list()
O alta functie utila în lucrul cu tablouri este functia list(), aceasta va permite sa atribuiti valori la numeroase variabile în cadrul unei instructiuni.
Functia list() este deseori folosita cu functia each(), deoarece functia list() faciliteaza accesul separat la cheia si la valoarea returnate de functia each().
Forma generala de utilizare a functiei list() este urmatoarea:
list($var1, $var2, ..…, $varn) = valoare_tablou;
Fiecare dintre variabilele specificate, de la $var1 la $varn, primeste o valoare din tabloul "valoare_tablou".
Într-un fel, functia list() este opusa functiei array(), deoarece functia list() împarte un tablou într-o serie de valori scalare, în timp ce functia array() construieste un tablou dintr-o serie de valori scalare.
Iata un exemplu care ilustreaza modul de utilizare a functiei list():
<?php
$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");
list($cheie, $valoare) = each($limbaje);
echo "<br />cheie = $cheie, valoare = $valoare";
$urmator = next($limbaje);
echo "<br />urmator = $urmator";
?>
Iata datele de iesire ale exemplului:
cheie = 10, valoare = Perl
urmator = Python
PHP contine peste 40 de functii pentru lucrul cu tablourile. De exemplu, functia array_search() faciliteaza cautarea într-un tablou.
Pentru informatii despre aceasta functie si despre alte functii utilizate în lucrul cu tablouri, vizitati site-ul www.php.net.
6. Sortarea tablourilor
Sortarea reprezinta o alta operatie frecvent aplicata tablourilor. PHP furnizeaza o suita de functii care faciliteaza sortarea unui tablou.
De exemplu, un tablou poate fi creat dupa cum urmeaza:
$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");
Apoi, doriti sa sortati tabloul în ordine alfabetica, in functie de numele limbajului de programare.
Pentru aceasta, pur si simplu invocati functia sort():
sort($limbaje);
Dupa sortare, continutul tabloului apare in ordinea cum se poate vedea mai jos:
- 0 => PHP
- 1 => Perl
- 2 => Python
Observati ca secventa de sortare sau secventa de aranjare (cum este numita uneori) este sensibila la diferenta între majuscule si minuscule. Deoarece litera "H" mare este sortata inaintea literei "e" mic, PHP apare înainte de Python în datele de iesire sortate.
Iata un exemplu practic de folosire a functiei
sort() :
<?php
$arr = array(0=>'Popescu', 1=>'Avram', 5=>'Cristian',3=>'Dan');
sort($arr);
foreach($arr as $key=>$nume) {
echo "<br />Cheie=$key Valoare=$nume";
}
?>
Rezultatul afisat este urmatorul :
Cheie=0 Valoare=Avram
Cheie=1 Valoare=Cristian
Cheie=2 Valoare=Dan
Cheie=3 Valoare=Popescu
- Se observa ca instructiunea
sort($arr) sorteaza matricea $arr dupa campul valoare (oridine alfabetica).
- Observam de asemenea ca valorile campului cheie a fost alterata, fara sa conteze valoarea sau ordinea cheilor.
Daca dorim sa sortam in ordine inversa alfabetic, folosim functia
rsort()
Iata acelasi exemplu, da cu functia
rsort()
<?php
$arr = array(0=>'Popescu', 1=>'Avram', 5=>'Cristian',3=>'Dan');
rsort($arr);
foreach($arr as $key=>$nume) {
echo "<br />Cheie=$key Valoare=$nume";
}
?>
Acum rezultatul afisat este urmatorul :
Cheie=0 Valoare=Popescu
Cheie=1 Valoare=Dan
Cheie=2 Valoare=Cristian
Cheie=3 Valoare=Avram
- Se observa ca si in acest caz au fost alterate valorile initiale ale cheilor.
Pentru a sorta matricea "$arr" pastrand corelarea initiala dintre valori si cheile corespunzatoare se folosesc functiile
asort(), respectiv
arsort().
Incercati-le singuri.
In afara de acestea mai sunt si alte functii utile pentru sortarea tablourilor.
Iata un tabel care prezinta functiile folositoare pentru sortarea unui tablou, impreuna cu rezultatul aplicarii fiecarei functii.
Vom lua ca model pentru exemplificare urmatoarea matrice:
- $limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");
Functie |
Operatia efectuata |
Rezultat |
sort() |
- Sortarea unui tablou în functie de valoare, in ordine alfabetica, fara sa se tina cont de cheile initiale |
0 => PHP
1 => Perl
2 => Python |
asort() |
- Sortarea unui tablou în functie de valoare, in ordine alfabetica, pastrand corelarea initiala dintre valori si cheile corespunzatoare |
20 => PHP
10 => Perl
21 => Python |
rsort |
- Sortarea unui tablou în functie de valoare, in ordine invers alfabetica, fara sa se tina cont de cheile initiale |
0 => Python
1 => Perl
2 => PHP |
arsort |
- Sortarea unui tablou în functie de valoare, in ordine invers alfabetica, pastrand corelarea initiala dintre valori si cheile corespunzatoare |
21 => Python
10 => Perl
20 => PHP |
ksort |
- Sortarea unui tablou în functie de cheie, in ordine ascendenta |
10 => Perl
20 => PHP
21 => Python |
krsort |
- Sortarea unui tablou în functie de cheie, in ordine descendenta |
21 => Python
20 => PHP
10 => Perl |
O modalitate de a executa o cautare fara sensibilitate la diferenta între majuscule si minuscule ar fi utilizarea functiei natcasesort(), care sorteaza un tablou folosind o ordine care nu este sensibila la diferenta între majuscule si minuscule.
O alta modalitate consta în a utiliza functia usort() sau una dintre functiile sale conexe, în speta uksort() si uasort().
Functia usort() sorteaza valorile din tablou si returneaza un tablou secvential; functia uksort() sorteaza cheile tabloului, iar functia uasort() sorteaza un tablou asociativ.
De exemplu, urmatoarele instructiuni creeaza un tablou si îl sorteaza într-o maniera insensibila la diferenta între majuscule si minuscule:
- $limbaje = array("Perl", "PHP", "Python");
usort($limbaje, "strcmpcase");
foreach($limbaje as $key=>$nume) {
echo "<br />$key => $nume";
}
Functia
strcmpcase() este o functie din biblioteca PHP care compara doua siruri fara a tine cont de majuscule sau minuscule. Functia returneaza o valoare negativa daca primul sir este mai mic decât al doilea, zero daca sirurile sunt identice, respectiv o valoare pozitiva daca primul sir este mai mare decât al doilea.
Rezultatul va fi :
- 0 => Perl
1 => PHP
2 => Python
Pentru mai multe informatii despre functia
usort() si despre functiile sale conexe, examinati site-ul
www.php.net
Transformarea sirurilor in matrice si invers
PHP pune la dispozitia utilizatorilor functii pentru conversia intre siruri si matrice. Acestea pot fi utile in situatii in care valoarea matricelor trebuie memorate in baza de date.
Pentru a transforma un sir intr-o matrice folosim functia explode(). Sintaxa aceste functii este:
- $matrice = explode(" ", $sir);
-
In loc de spatiul dintre (" "), ca indiciu de separare, poate fi scris orice caracter; dupa cum se doreste impartirea sirului.
Iata un exemplu:
<?php
$sir = "Popescu Avram Cristian Dan";
$matrice = explode(" ",$sir);
foreach($matrice as $key=>$nume) {
echo "<br />Cheie = $key Valoare = $nume";
}
?>
Acest cod va produce urmatorul rezultat:
Cheie = 0 Valoare = Popescu
Cheie = 1 Valoare = Avram
Cheie = 2 Valoare = Cristian
Cheie = 3 Valoare = Dan
Pentru a transforma o matrice intr-un sir, folosim functia
implode(). Sintaxa aceste functii este:
- $sir = implode(" ", $matrice);
-
In loc de spatiul dintre (" "), ca semn de separare a elementelor in sir, poate fi scris orice caracter; dupa cum se doreste crearea sirului.
In continuare, pentru exemplificare, folosind exemplul de mai sus, sortam matricea "$matrice" alfabetic si apoi transferam matricea intr-un alt sir , de aceasta data sortat (
Observati folosirea caracterelor ( \" ) in expresia echo, pentru ca la iesire rezultatul sa contina ghilimele):
<?php
$matrice = array("Popescu", "Avram", "Cristian", "Dan");
sort($matrice);
$sir = implode(" - ",$matrice);
echo "<br />Sirul rezultat : \"$sir\"";
?>
Acest cod va produce urmatorul rezultat:
Sirul rezultat : "Avram - Cristian - Dan - Popescu"
Part. 2 Creare tabel HTML cu date din Array
- O lista cu mai multe functii utile in lucrul cu Array gasiti la pagina ->
Functii pentru Array