BAZA WIEDZY
KURSY
Bazy danych w PHP
Kurs AdvancedAJAX
Kurs ASP
Kurs ASP.NET
Kurs C++
Kurs CSS
Kurs HTML
Kurs HTML drugi
Kurs JavaScript
Kurs MySQL
Kurs PHP
Kurs RSS
Kurs XHTML
Obiekty DOM
MANUALE
CSS1 - W3C
DOM - w budowie
PHP 2005
PHP 2006
Wyrażenia regularne
SHOUTBOX
STAT
Online: 16 | UU: 415
[PHP] Jak sortować tablice zwykłe i asocjacyjne?
6 lipiec 2007

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

Dodaj komentarz









Komentarze
3 odpowiedzi
d4mian
17 luty 2009, godz. 5:12

Dzięki ;) właśnie o to mi chodziło. Tylko tu znalazłem jak odwrócić tablicę w sposób dla leniwych ;) bo na pętlach i przesuwaniu elementów to niezbyt kolorowo ;)

Łukasz
13 wrzesień 2008, godz. 10:36

A jak posortowac dane tekstowe zaczynajace sie od nietypowych znakow ?
Np. Sortujemy tablice imion
“;
?>

14 maj 2008, godz. 8:15

edit by Dawid

 
 
Copyright © 2006-2011 egrafik.pl | Kontakt | Reklama | Projekty domów
jocker