Utilizare matrice – Array 2

  • Învatati modul de utilizare a matricelor pentru stocarea mai multor valori
  • Învatati cum sa accesati datele unei matrice (tablou)
  • Parcurgerea unui Array secvential

1. Utilizarea matricelor

Deseori este convenabila stocarea mai multor valori într-o variabila. O asemenea variabila se numeste matrice (Array sau „tablou”), iar valorile individuale se numesc elementele matricei. Aici, „matrice„, „Array” sau „tablou” reprezinta acelasi lucru (in varianta engleza: Array), fapt pentru care vom folosi orcare dintre aceste denumiri.
Fiecare element al unei matrici are doua elemente importante: cheia si valoarea elementului.
Matricele pot fi create folosind doua medode principale:

  • 1 – utilizand direct instructiunile de atribuire
  • 2 – folosind sintaxa array() despre care am vorbit in tipul variabilelor.


1. Crearea de matrice folosind functia de atribuire

Pentru a crea o matrice, atribuiti unui element al matricei o valoare si o cheie. De exemplu, urmatoarea instructiunea de atribuire:

  • $clasa[1] = „geometrie”;

creeaza un tablou denumit „$clasa” si un element cu valoarea „geometrie” identificat prin cheia „1”.
Pentru a stoca în matrice o a doua valoare, puteti folosi urmatoarea instructiune de atribuire:

  • $clasa[2] = „algebra”;

Pentru a obtine acces la un element al matricei, specificati numele matricei si valoarea cheii. De exemplu, instructiunea de atribuire

  • $clasa_mate = $clasa[1];

Atribuie valoarea „geometrie” variabilei $clasa_mate.
Cheile folosite pentru identificarea elementelor unei matrice nu trebuie sa fie obligatoriu numere consecutive; nici macar nu trebuie sa fie numere. De exemplu, iata instructiuni de atribuire care creeaza o matrice ce stocheaza preferinte în materie de fructe:

  • $preferinte[Nelu] = „cirese”;
    $preferinte[Radu] = „mere”;
    $preferinte[Gabi] = „pere”;


2. Crearea de matrice folosind sintaxa array()

Dincolo de utilizarea instructiunilor de atribuire, cealalta modalitate principala de creare a unui tablou PHP consta în utilizarea functiei array(). Iata un exemplu simplu, care creeaza un tablou având drept chei valori întregi consecutive:

  • $limbaje = array(„Perl”, „PHP”, „Python”);

Deoarece valoarea cheilor nu a fost specificata, acestea vor fi automat trecute de program ca numere intregi consecutive, incepand de la „0” (prima cheie va avea valoarea ‘0’, a doua cheie va avea valoarea ‘1’, …)
Aceasta instructiune creeaza o matrice care contine urmatoarele asocieri:

  • 0 => Perl
    1 => PHP
    2 => Python

Daca doriti sa asociati unei valori o anumita cheie, puteti folosi operatorul =>, astfel:

  • $limbaje = array(10=>”Perl”, „PHP”, „Python”);

Aceasta instructiune creeaza urmatoarea matrice:

  • 10 => Perl
    11 => PHP
    12 => Python

Ca si în cazul utilizarii unei instructiuni de atribuire pentru crearea unei matrice valorile cheilor nu trebuie sa fie consecutive si nici macar întregi:

  • $limbaje = array(„PHP”=>”Ridicat”, „Python”=>”Mediu”, „Perl”=>”Redus”);

Aceasta instructiune creeaza urmatoarea matrice:

  • PHP => Ridicat
    Python => Mediu
    Perl => Redus

2. Matrici multi-dimensionale

Este posibil ca un element al matricei sa fie de asemenea o matrice. In acest caz avem de-a face cu o matrice multi-dimensionala.
Sa luam un exemplu practic :

<?php
$multiDimArray[firstLine] = array(1=>10, 2=>20, „a”=>”alpha”);
$multiDimArray[„nextLine”] = array(1=>20, 2=>40, „b”=>”beta”);

echo „<br />”.$multiDimArray[„firstLine”][1];
echo „<br />”.$multiDimArray[„nextLine”][1];
echo „<br />”.$multiDimArray[„firstLine”][2];
echo „<br />”.$multiDimArray[„firstLine”][„a”];
echo „<br />”.$multiDimArray[„nextLine”][„b”];
?>

Sau putem scrie acelasi script si astfel (rezultatul e acelasi) :

<?php
$multiDimArray = array(„firstLine”=>array(1=>10, 2=>20, „a”=>”alpha”), „nextLine”=>array(1=>20, 2=>40, „b”=>”beta”));

echo „<br />”.$multiDimArray[„firstLine”][1];
echo „<br />”.$multiDimArray[„nextLine”][1];
echo „<br />”.$multiDimArray[„firstLine”][2];
echo „<br />”.$multiDimArray[„firstLine”][„a”];
echo „<br />”.$multiDimArray[„nextLine”][„b”];
?>

Rezultatul afisat va fi urmatorul :

10
20
20
alpha
beta

In exemplul de mai sus am declarat un array cu 2 linii si 3 coloane. Prima linie este identificata de array-ul cu numele „fisrtLine”, iar ce-a de-a doua linie este identificata de „nextLine”.

Observati de asemenea foloasirea in functia „echo” a operatorului de concatenare „.” impreuna cu „<br />” (care este un element din XHTML), pentru ca la afisarea in browser fiecare rezultat al functiei „echo” sa fie trecut pe o linie noua. In caz contrar rezultatele ar fi fost pe aceeasi linie : 10 20 20 alfa beta

3. Accesul la datele dintr-un array

Când ati stocat date într-un tablou, puteti obtine acces la valoarea unui element al tabloului sau îi puteti modifica valoarea prin intermediul cheii asociate elementului.
De exemplu, sa presupunem ca folositi urmatoarele instructiuni pentru a crea un tablou:

  • $x = array(1=>10, 2=>100, 3=>1000);

Puteti obtine acces la valoarea asociata cheii 2 prin intermediul unei instructiuni ca aceasta:

  • $y = 3*$x[2];

Similar, puteti modifica valoarea asociata cheii 3 prin intermediul unei instructiunu ca aceasta:

  • $x[3] = 101;

4. Parcurgere Array numeric

Un Array ale carui chei sunt valori întregi consecutive se numeste „Array numeric” (sau secvential).
În general, valoarea cea mai mica a unei chei dintr-un tablou numeric este zero; totusi, puteti crea array numeric incepand cu valoarea 1 sau orice alta valoare întreaga ca valoare minima a cheii.
În cazul în care cunoasteti valoarea minima a cheii unui tablou secvential, puteti parcurge tabloul folosind o bucla for. Pentru aceasta, initializati variabila de bucla la valoarea cea mai redusa a cheii. Folositi functia count() pentru a forma expresia de test (conditia) a buclei. Functia count() returneaza numarul elementelor dintr-un tablou.
Iata un exemplu simplu

<?php
$limbaje = array(0=>”Perl”, 1=>”PHP”, 2 =>”Python”);
$limita = count($limbaje);
for ($i = 0; $i < $limita; $i++) {
        echo „<br />$i => $limbaje[$i]”;
}
?>

Prima variabila $imbaje creeaza tabloul.
Cea de-a doua variabila $limita foloseste instructiunea count() pentru a obtine numarul elementelor din tablou.
Instructiunea for foloseste variabila bucla $i pentru a parcurge iterativ (element cu element) tabloul; corpul instructiunii include o instructiune echo care afiseaza cheia si valoarea fiecarui element din tablou.
Datele de iesire vor fi astfel:

0 => Perl
1 => PHP
2 => Python

Sa ne concentram asupra problemei de a determina daca un tablou contine o anumita valoare.
Iata un exemplu:

<?php
$limbaje = array(0=>”Perl”, 1=>”PHP”, 2 =>”Python”);
$cauta = PHP;     // se cauta in tabloul $limbaje valoarea $cauta
$limita = count($limbaje);
for ($i = 0; $i < $limita; $i++) {
      echo „<br />Determinarea unei identitati cu $limbaje[$i]”;
      if ($cauta == $limbaje[$i]) {
          echo „<br />$cauta este un limbaj excelent.”;
      }
}
?>

Prima variabila $imbaje creeaza tabloul în care se va cauta.
Cea de-a doua instructiune atribuie valoarea „PHP” variabilei $cauta; (în exemplu, se cauta în tablou valoarea stocata în variabila $cauta).
Dupa comentariu (care incepe cu //), urmatoarea instructiune obtine numarul elementelor din tablou si stocheaza aceasta valoare în variabila $limita.
Instructiunea for functioneaza ca mai înainte; de data aceasta însa, corpul sau contine alte instructiuni si se executa o alta operatie. O instructiune echo afiseaza valoarea fiecarui element al tabloului pe masura ce parcurgerea tabloului avanseaza. Instructiunea if testeaza fiecare element si afiseaza un mesaj daca valoarea elementului este una si aceeasi cu valoarea variabilei $cauta.
Iata rezultatul rularii exemplului:

Determinarea unei identitati cu Perl
Determinarea unei identitati cu PHP
PHP este un limbaj excelent.
Determinarea unei identitati cu Python


• Incepand cu versiunea PHP 5.4 a fost introdus un nou mod de a defini variabile array, folosind o sintaxa scurta.
Ex.:

$arr = [];              // array gol, in loc de array();
$arr = [1, 2, 3, 4];    // array numeric
$arr = ['eng'=>'courseweb.net', 'ro'=>'discant.ro', 'num'=>8];       // array asociativ

– Array-ul creat cu aceasta sintaxa poate fi accesat, modificat si parcurs ca orice array.

Instructiunea break

Observati ca parcurgerea continua chiar si dupa gasirea valorii cautate.
Când se cauta într-un tablou, executia cautarii poate fi oprita dupa gasirea elementului dorit; continuarea parcurgerii in Array nu face decât sa iroseasca resursele calculatorului, fara a afecta rezultatele operatiei.
Pentru a opri executia unei parcurgeri, puteti folosi instructiunea break, care determina încheierea imediata a buclei care o contine.
Iata cum se poate revizui exemplul anterior, astfel încât sa includa o instructiune break:

<?php
$limbaje = array(0=>”Perl”, 1=>”PHP”, 2 =>”Python”);
$cauta = PHP;     // se cauta in tabloul $limbaje valoarea $cauta
$limita = count($limbaje);
for ($i = 0; $i < $limita; $i++) {
      echo „<br />Determinarea unei identitati cu $limbaje[$i]”;
      if ($cauta == $limbaje[$i]) {
          echo „<br />$cauta este un limbaj excelent.”;
          break;
      }
}
?>

Acum, dupa stabilirea unei identitati, instructiunea break provoaca sistarea buclei for.
Iata datele de iesire rezultate, care acum omit examinarea inutila a elementului tabloului asociat cu limbajul „Python”:

Determinarea unei identitati cu Perl
Determinarea unei identitati cu PHP
PHP este un limbaj excelent.

Instructiunea continue

O instructiune corelata cu instructiunea break este continue.
Instructiunea continue opreste secventa curenta a buclei, determinând evaluarea imediata a expresiilor de incrementare si de test.
Ca un exemplu, sa presupunem ca doriti sa cautati în tabloul $limbaje pentru a determina numarul limbajelor care au nume scurte, adica nume alcatuite din maximum 4 caractere. Iata un exemplu care executa aceasta prelucrare a datelor:

<?php
$limbaje = array(0=>”Perl”, 1=>”PHP”, 2 =>”Python”);
$scurt = 0;
$limita = count($limbaje);
for ($i = 0; $i < $limita; $i++) {
      $n = strlen($limbaje[$i]);
      echo „<br />$limbaje[$i] are $n caractere lungime”;
      if ($n > 4) continue;
          $scurt++;
}
echo „<br />Au fost gasite $scurt limbaje cu nume scurte.”;
?>

O instructiune de atribuire stabileste valoarea initiala a variabilei $scurt la zero, folosita pentru a numara numele scurte gasite.
Instructiunea for se aseamana celor folosite anterior. Corpul acestei instructiuni difera, desigur, de cele folosite anterior. Valoarea variabilei $n este stabilita ca fiind egala cu numarul caracterelor care compun numele limbajului, folosind functia strlen(), care calculeaza lungimea unui sir.
Daca instructiunea if stabileste ca elementul curent al tabloului face referire la un limbaj cu nume lung, se executa instructiunea continue.
Instructiunea continue determina trecerea parcurgerii la urmatorul element din tablou, fara a mai executa expresia „$scurt++”; daca nu au mai ramas elemente în tablou, bucla for îsi încheie executia.
La finalizarea parcurgerii, o instructiune echo afiseaza numarul numelor scurte de limbaje gasite în tablou. Iata rezultatul:

Perl are 4 caractere lungime
PHP are 3 caractere lungime
Python are 6 caractere lungime
Au fost gasite 2 limbaje cu nume scurte.


– O lista cu 37 functii utile in lucrul cu Array gasiti la pagina -> Functii pentru Array

Utilizare Array (matrice) – (2)

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

CheieValoare
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”);
FunctieOperatia efectuataRezultat
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”

Creare tabel HTML din Array

Acest capitol explica cum pot fi create corect tabele HTML cu date stocate intr-un Array sau care in general sunt parcurse cu instructiuni WHILE, FOR sau FOREACH.
O problema des intalnita in acest caz este afisearea incorecta a randurilor, coloanelor tabelului sau chiar generarea de mai multe tabele in loc de unul singur cu mai multe randuri.
De cele mai multe ori cauza e ca inceputul (si inchiderea) tabelului HTML sunt in bucla WHILE sau FOR, iar cand se repeta executia din bucla se creaza iar codul pt. inceputul tabelului.
Solutia: Scrierea codului de inceput (si sfarsit) de tabel in afara buclei FOR sau WHILE.

In urmatoarele exemple este explicat modul general de creare a unui tabel HTML cu mai multe coloane, folosind WHILE, FOR si FOREACH.

1. Crearea tabelului cu datele dintr-o matrice secventiala simpla

– Explicatiile necesare sunt in documentatia din cod (Observati cum se lucreaza cu un indice pentru generarea de randuri noi in functie de cate coloane trebuie pe fiecare rand.).

Exemplu cu WHILE

<?php
// Matricea cu datele ce vor fi afisate in tabel
$aray = array(‘val1’, ‘val2’, ‘val3’, ‘… val_n’);

// Afla numarul de elemente din matrice
$nr_elm = count($aray);

// Variabila in care va fi stocat codul HTML cu tabelul
$tabel_html = ”;

// Aici se precizeaza numarul de coloane care sa fie pe fiecare rand
$nr_col = 2;

// Daca matricea are cel putin un element
if ($nr_elm > 0) {
  // Se creaza codul pt. inceputul tabelului HTML si al primului rand
  $tabel_html = ‘<table border=”1″><tr>’;

  // Se parcurge matricea cu WHILE
  $i = 0;                 // Indice pt. rand nou si pt. primul element din Array
  while($i < $nr_elm) {
  // Se adauga in tabel coloanele
    $tabel_html .= ‘<td>’ .$aray[$i]. ‘</td>’;

    $i++;                 // Se incrementeaza valoarea indicelui

    // Daca restul impartirii lui $i la numarul de coloane stabilit e 0
    // Adauga un nou rand in tabel
    if (($i % $nr_col)==0) { $tabel_html .= ‘</tr><tr>’; }
  }

  // Se adauga (dupa terminarea lui WHILE) inchiderea randului si tabelului HTML
  $tabel_html .= ‘</tr></table>’;

  // Se elimina posibil rand gol adaugat, pt. care nu au mai fost elemente pt. coloane (<tr></tr>)
  $tabel_html = str_replace(‘<tr></tr>’, ”, $tabel_html);
}

// Se afiseaza tabelul obtinut
echo $tabel_html;
?>

Exemplu cu FOR

<?php
// Matricea cu datele ce vor fi afisate in tabel
$aray = array(‘val1’, ‘val2’, ‘val3’, ‘… val_n’);

// Afla numarul de elemente din matrice
$nr_elm = count($aray);

// Variabila in care va fi stocat codul HTML cu tabelul
$tabel_html = ”;

// Aici se precizeaza numarul de coloane care sa fie pe fiecare rand
$nr_col = 2;

// Daca matricea are cel putin un element
if ($nr_elm > 0) {
  // Se creaza codul pt. inceputul tabelului HTML si al primului rand
  $tabel_html = ‘<table border=”1″><tr>’;

  // Se parcurge matricea cu FOR
  for($i=0; $i<$nr_elm; $i++) {
    // Se adauga in tabel coloanele
    $tabel_html .= ‘<td>’ .$aray[$i]. ‘</td>’;

    // Daca restul impartirii lui ($i+1) la numarul de coloane stabilit e 0
    // Adauga un nou rand in tabel
    if ((($i+1) % $nr_col)==0) { $tabel_html .= ‘</tr><tr>’; }
    }

  // Se adauga (dupa terminarea lui WHILE) inchiderea randului si tabelului HTML
  $tabel_html .= ‘</tr></table>’;

  // Se elimina posibil rand gol adaugat, pt. care nu au mai fost elemente pt. coloane (<tr></tr>)
  $tabel_html = str_replace(‘<tr></tr>’, ”, $tabel_html);
}

// Se afiseaza tabelul obtinut
echo $tabel_html;
?>

– La fel se procedeaza cu WHILE si FOR pentru date ce sunt preluate din alta sursa (nu doar Array), cum ar fi randuri dintr-un fisier.

Exemplu cu FOREACH

– FOREACH e util pentru parcurgerea matricelor non-secventiale (cheile nu sunt numere consecutive).

<?php
// Matricea cu datele ce vor fi afisate in tabel
$aray = array(‘a’=>’val1’, ‘b’=>’val2′, 3=>’val3’, ‘z’=>’… val_n’);

// Variabila in care va fi stocat codul HTML cu tabelul
$tabel_html = ”;

// Aici se precizeaza numarul de coloane care sa fie pe fiecare rand
$nr_col = 2;

// Daca matricea are cel putin un element
if (count($aray) > 0) {
  // Se creaza codul pt. inceputul tabelului HTML si al primului rand
  $tabel_html = ‘<table border=”1″><tr>’;

  // Se parcurge matricea cu FOREACH

  $i = 0;                 // Indice pt. rand nou
  foreach($aray as $key => $val) {
    // Se adauga in tabel coloanele
    $tabel_html .= ‘<td>’ .$val. ‘</td>’;

    $i++;                 // Se incrementeaza valoarea indicelui

    // Daca restul impartirii lui $i la numarul de coloane stabilit e 0
    // Adauga un nou rand in tabel
    if (($i % $nr_col)==0) { $tabel_html .= ‘</tr><tr>’; }
  }

  // Se adauga (dupa terminarea lui FOREACH) inchiderea randului si tabelului HTML
  $tabel_html .= ‘</tr></table>’;

  // Se elimina posibil rand gol adaugat, pt. care nu au mai fost elemente pt. coloane (<tr></tr>)
  $tabel_html = str_replace(‘<tr></tr>’, ”, $tabel_html);
}

// Se afiseaza tabelul obtinut
echo $tabel_html;
?>


– Toate aceste exemple vor afisa urmatorul tabel:

val1val2
val3… val_n

2. Crearea tabelului HTML cu date dintr-o baza de date

– In general, cel mai des folosit caz este acela cand sunt selectate mai multe randuri dintr-un tabel MySQL si se doreste afisarea lor intr-un tabel HTML.
Mai jos este un exemplu general simplu pentru afisarea datelor din MySQL sub forma de tabel.
Pentru lucrul cu MySQL vedeti lectiile mai avansate, de la nr. 22-27, apoi reveniti la acest tutorial.

<?php
// Variabila in care va fi stocat codul pt. tabelul HTML
$tabel_html = ”;

// Se face conectarea la MySQL si selectarea bazei de date

// Selectarea randurilor din tabelul MySQL
$cerereSQL = „SELECT * FROM `nume_tabel` WHERE `coloana`=’$val'”;
$rezultat = mysql_query($cerereSQL);

// Daca sunt returnate randuri de tabel
if(mysql_num_rows($rezultat) > 0) {
  // Se creaza codul pt. inceputul tabelului HTML
  $tabel_html = ‘<table border=”1″>’;

  // Se scrie in bucla WHILE codul HTML pt. adaugarea DOAR a randurilor ce vor fi in tabel
  while($rand = mysql_fetch_array($rezultat)) {
    $tabel_html .= ‘<tr><td>’ .$rand[‘col1’]. ‘</td><td>’ .$rand[‘col2’]. ‘</td></tr>’;
  }

  // Se adauga (dupa terminarea lui WHILE) inchiderea tabelului HTML
  $tabel_html .= ‘</table>’;
}

// Se afiseaza codul tabelului HTML obtinut
echo $tabel_html;
?>

Similar Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *