Wielokrotnie zachodzi potrzeba użycia tablic i odpowiedniego w nich sortowania. Np. użycia w tablicach sortowania elementów liczbowych od najmniejszego do największego lub odwrotnie. Lub też użycia w tablicach przechowujących ciągi znaków sortowania alfabetycznego. W tej poradzie przedstawię sposoby użycia takich funkcji, by odpowiednio sortować tablice jednowymiarowe zwykłe i asocjacyjne.
Przykład 1 - sortowanie zwykłych tablic zawierających dane liczbowe
Spróbujmy posortować przykładową tablicę zawierającą dane liczbowe od wartości najmniejszej do największej.
Kod: php
<?php
$liczby = array(2.52, 0.65 , 1.30, 0.99, 0.35);
sort($liczby);
for ($k=0; $k <= 4; $k++) //pętla wypisująca wartości
echo $liczby[$k]."<br \>";
?>
W powyższym przykładzie tablica posortowana została wg wartości jakimi są podane w nawiasie liczby:
0.35
0.65
0.99
1.3
2.52
Przykład 2 - sortowanie zwykłych tablic zawierających dane tekstowe
Poniższy kod posortuje wartości w kolejności alfabetycznej od a do z.
Kod: php
<?php
$samochody = array("volvo", "mercedes" , "fiat", "ford", "bmw");
sort($samochody);
for ($k=0; $k <= 4; $k++) //pętla wypisująca wartości
echo $samochody[$k]."<br \>";
?>
W powyższym przykładzie tablica posortowana została alfabetycznie wg wartości jakimi są podane w nawiasie marki samochodów:
bmw
fiat
ford
mercedes
volvo
Należy zwrócić uwagę, że funkcja sort() jest czuła na wielkość znaków. W pierwszej kolejności sortowanie odbywa się wg wielkich znaków. Wartość a jest przed wartością z, ale już wartość Z jest przed wartością a.
Przykład 3 - sortowanie tablic asocjacyjnych
W przypadku tablic asocjacyjnych nie można użyć funkcji sort(). Gdybyśmy taką funkję użyli, elementy zostałyby posortowane wg numeru indexu z tablicy. Do sortowania tablic asocjacyjnych należy użyć funkcji asort() lub ksort(). W pierwszym przypadku sortowanie odbywa się wg wartości, w drugim wg klucza.
W poniższym przykładzie stworzona zotanie tablica zawierająca trzy modele samochodów oraz ich ceny (w tys. zł.). Zastosowane zostanie sortowanie wg kolejności rosnącej: ceny - od najniższej do najwyższej.
Kod: php
<?php
$ceny_samochodow = array ( "bmw" => "200",
"fiat" => "50",
"mercedes" => "150",
);
asort($ceny_samochodow);
foreach($ceny_samochodow as $klucz => $wartosc)
echo $klucz." kosztuje ".$wartosc." tysięcy złotych<br />"; //wypisanie wartości
?>
Powyższy przykład wyświetli:
fiat kosztuje 50 tysięcy złotych
mercedes kosztuje 150 tysięcy złotych
bmw kosztuje 200 tysięcy złotych
Funkcja asort() posortowała elementy tablicy wg wartości jaką jest cena.
W przypadku gdybyśmy chcieli posortować tablicę wg klucza, czyli nazwy samochodu, należałoby zastosować funkcję ksort().
Kod: php
<?php
$ceny_samochodow = array ( "bmw" => "200",
"fiat" => "50",
"mercedes" => "150",
);
ksort($ceny_samochodow);
foreach($ceny_samochodow as $klucz => $wartosc)
echo $klucz." kosztuje ".$wartosc." tysięcy złotych<br />"; //wypisanie wartości
?>
Powyższy przykład wyświetli:
bmw kosztuje 200 tysięcy złotych
fiat kosztuje 50 tysięcy złotych
mercedes kosztuje 150 tysięcy złotych
Sortowanie tablic w odwtornej kolejności
We wszystkich przykładach za pomocą funkcji sort(), asort() i ksort() stosowaliśmy sortowanie wg kolejności rosnącej. Wszystkie te funkcje posiadają odpowiedniki umożliwiając sortowanie w kolejności malejącej - rsort(), arsort() i krsort().
Funkcja rsort() - sortuje jednowymiarowe tablice zwykłe wg wartości w kolejności malejącej.
Funkcja arsort() - sortuje jednowymiarowe tablice asocjacyjne wg wartości w kolejności malejącej.
Funkcja krsort() - sortuje jednowymiarowe tablice asocjacyjne wg klucza w kolejności malejącej.
Opracowanie: Adam Suchowski