Sortare array multidimensional in PHP

Sortare array multidimensional in PHP

Exista situatii in care anumite informatii sunt stocate intr-un array multidimensional, cum ar fi, de exemplu, continutul unui tabel care trebuie apoi afisat intr-o pagina. Daca tabelul are un numar considerabil de linii si coloane este posibil sa apara nevoia sortarii informatiei dupa anumite coloane.

In cazul in care informatia este adusa direct dintr-o tabela a unei baze de date, atunci lucrurile sunt destul de simple, pentru ca sortarea se poate face la momentul interogarii bazei de date. Insa, daca informatia de pe anumite coloane ale tabelului este calculata dupa anumite formule si nu poate fi regasita direct in baza de date interogata, atunci lucrurile se complica putin. In aceasta situatie, sortarea trebuie facuta direct pe array-ul multidimensional care contine informatia din tabelul de afisat.

Sa presupunem ca avem un array cu 3 dimensiuni corespunzatoare celor 3 coloane ale tabelului: Nume, Departament, Punctaj. Array-ul contine mai multe elemente definite sub forma:

$tabel[] = array('nume' => 'Mihai', 'departament' => 'Tehnic', 'punctaj' => 10);

Se doreste ordonarea dupa coloana Departament. Pentru aceasta se va apela la functia array_multisort oferita de php, iar secventa de cod care face sortarea este urmatoarea:

foreach($tabel AS $key => $value){
    $temp[$key] = $value['departament'];
}
array_multisort($temp, SORT_ASC, $tabel);

Practic, se foloseste un array $temp in care se retin toate valorile corespunzatoare coloanei Departament. Apoi, functia array_multisort primeste ca parametru acest array $temp, ordinea de sortare (SORT_ASC) si array-ul care contine toata informatia din tabel ($tabel). Functia array_multisort sorteaza mai intai array-ul $temp in ordinea specificata, dupa care asociaza fiecare element din array-ul initial ($tabel) la indexul corespunzator din array-ul $temp.

Sa presupunem ca se doreste ordonarea dupa coloana Departament crescator si dupa coloana Punctaj descrescator. In acest caz, secventa de cod va arata in felul urmator:

foreach($tabel AS $key => $value){
    $temp1[$key] = $value['departament'];
    $temp2[$key] = $value['punctaj'];
}
array_multisort($temp1, SORT_ASC, $temp2, SORT_DESC, $tabel);

 

Leave a Reply

Your email address will not be published. Required fields are marked *