Utilizare Array (matrice) - (2)

Part. 2 Creare tabel HTML cu date din 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:

- 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:

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:
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:

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 : 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:

- 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: - 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
Utilizare matrice - array ... <<-- Anterior --- Urmator -->> Utilizare functii

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce tag adauga imagine in pagina web?
<div> <img> <span>
<img src="http://coursesweb.net/imgs/webcourses.gif" width="191" height="63" alt="Courses-Web" />
Care din aceste coduri CSS afiseaza textul inclinat?
font-style: italic; text-decoration: underline; font-weight: 500;
#id {
  font-style: italic;
}
Clic pe functia jQuery care ascunde animat un element HTML.
click() hide() show()
$(document).ready(function() {
  $(".a_class").click(function(){ $(this).hide("slow"); });
});
Clic pe functia definita corect in PHP.
fname function() {} function fname() {} function $fname() {};
function fname($a, $b) {
  echo $a * $b;
}
Indicati forma pentru Prezent Perfect Continuu a verbului "to walk" (a merge).
have walked have been walking be walking
I have been walking for 5 hours.
- Merg pe jos de 5 ore.
Indicati Trecutul Nedefinit pentru verbul "ser" (a fi) la forma Yo.
será sería fui
Yo fui entrenador.
- Am fost antrenor.
Utilizare array - matrice 2 - Tutoriale PHP