publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
skomentuj »

TAGI: php , programowanie , tips & tricks

2010-02-02 16:44  |  Michał Beyer

W jaki sposób posortować wielowymiarową tablicę w PHP?

W jaki sposób posortować wielowymiarową tablicę w PHP?

Sortowanie tablic wielowymiarowych i jednowymiarowych wcale nie musi się tak bardzo od siebie różnić. Za sprawą funkcji array_multisort proces ten może stać się znacznie prostszy niż w przypadku autorskich rozwiązań.

Opis funkcji

Kiedy działamy na tablicach o jednej kolumnie, bardzo często niezbędnymi w użyciu stawały się funkcje z dziedziny xsort. Czy to rsort() sortująca w odwrotnej kolejności, czy asort() zachowujące skojarzenia kluczy, nadawały się idealnie do porządkowania danych, na których operowaliśmy. Co jednak, gdy musimy wykonać bardziej złożoną operację, na np. dwóch wymiarach tablicy?

Z pomocą przychodzi wtedy array_multisort, funkcja porządkująca elementy wielu tablic lub tablic kilkuwymiarowych.

 

bool array_multisort ( array $table_1 [, mixed $arg_order_flag_1 [, mixed $arg_order_type_flag_1 [, ... [, array $table_n [, mixed $arg_order_flag_n [, $arg_order_type_flag_n ]]]]]] );


W praktyce pierwszym parametrem musi być tablica (osobna lub jedna z jej kolumn), a kolejne muszą być nią lub odpowiednią flagą. Pierwszym typem flag są te, które porządkują sortowanie:

  • SORT_ASC – rosnąco (domyślnie),
  • SORT_DESC – malejąco.

Następnym, te które określają tryb porównywania:

  • SORT_NUMERIC – numeryczny (w którym ciągi znaków tekstowych uznawane będa za wartość zerową),
  • SORT_REGULAR – normalne (domyślnie),
  • SORT_STRING – tekstowe.

Przykładowo, możemy więc użyć tej metody na następujące sposoby:

  

// sortowanie drugiej tablicy względem pierwszej z domyślnymi flagami
array_multisort($tablica, $tablica2);
// sortowanie pierwszego wymiaru rosnąco i numerycznie oraz drugiego wymiaru malejąco i domyślnie, jeżeli wystąpią w nim takie same wartości
array_multisort($tablica[0], SORT_ASC, SORT_NUMERIC, $tablica[1], SORT_DESC, SORT_REGULAR);


Należy wiedzieć także, że w przypadku, kiedy klucze są typu numerycznego, to po przesortowaniu są one przenumerowywane, a asocjacyjne odpowiedniki są zachowywane.

 

Rysunek: zachowania indeksów w zależności od ich typów.

 

«poprzednia 1 2 następna »

publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
skomentuj »

Polecamy

Reklama

Polecane książki

Czytaj Webhosting

Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.

Zarejestruj domenę

Sprawdź dostępność swojej domeny:

.pl: 0 zł   .com: 19.90 zł
.com.pl: 0 zł   .eu: 19.90 zł