fluffy
22.01.2010, 09:37:45
Witam,
Szukałem na forum i w internecie, czytałem manuale funkcji sortujących ale nie znalazłem odpowiedzi na mój problem.
Mam w folderach pliki ze zdjęciami nazwane cyframi od 1 do n.
Wszystko fajnie tylko po zczytaniu ich z katalogu przez PHP zwracane są w kolejności 1,10,11,12,...,19,2,20,21... itd.
A ja potrzebuję je zwrócić w kolejności 1,2,3,4,5,6,7....
Mógłbym oczywiście zastosować pętlę i pobierać pliki np od zmiennej $i, ale chciałbym żeby można było wrzucać pliki o różnej nazwie.
Można byłoby zostawić zwykłe alfabetyczne sortowanie, jednak mam takich galerii ze zdjęciami prawie tysiąc dlatego też zależy mi na jakimś rozwiązaniu.
W końcu np. total commander wyświetla pliki tak jakbym chciał więc chyba istnieje rozwiązanie tego problemu.
Bardzo Was proszę o wskazanie tematu na forum z rozwiązaniem, lub jakieś sugestie.
Pozdrawiam
starach
22.01.2010, 09:45:37
Musisz do tego samemu napisać funkcję sortującą.
np. używając
void usort ( array &$tablica , callback $funkcja_porównująca ) Obcinasz fragment składający się z liczb konwertujesz do integera i porównujesz jak zwykłe liczby.
wookieb
22.01.2010, 09:49:05
http://pl2.php.net/sort i drugi parametr "
SORT_NUMERIC - porównuj elementy jako liczby"
phpion
22.01.2010, 09:51:30
Prościej chyba wrzucić nazwy plików z katalogu do jakiejś tablicy rzutując ją wcześniej na inta:
$tab[] = (int)$nazwa_pliku;
Wówczas z 1.jpg zrobi się 1 jako liczba. Posortujesz taką tablicę zwykłym sort() ale przy wyświetlaniu musisz dodać rozszerzenie pliku do elementu tablicy (bo będziesz miał 1 zamiast 1.jpg). Możesz również zapisywać tak aby mieć numer => nazwa_pliku:
$tab[(int)$nazwa_pliku] = $nazwa_pliku;
i posortować tablicę po kluczu z zachowaniem wartości. Jaką funkcją? Poszukaj w manualu

Cytat(wookieb @ 22.01.2010, 09:49:05 )

http://pl2.php.net/sort i drugi parametr "
SORT_NUMERIC - porównuj elementy jako liczby"
Chyba jednak będzie najlepsze

hehe.
adam83
22.01.2010, 10:53:41
Witam,
Zastosuj rozwiazanie zaproponowane przez phpion, pobierz zawartosc katalogu do tablicy, zwyklym sortem ukladasz je alfabetycznie, nastepnie wyswietlasz wg. wlasnego pomyslu. Zamiescilem podobne pytanie kilka dni temu, dostalem taka podpowiedz, wszystko dziala bez zarzutu - jesli chcesz to napisz na priv, podesle kod.
pzdr
(przepraszam za brak polskich znakow -sila wyzsza)
fluffy
22.01.2010, 10:56:18
Dziękuję wszystkim za rady...
Poszedłem tropem natsort()
tylko ta funkcja sortuje co prawda tablicę tak jak chciałbym jednak nie zmienia indeksów elementów w niej znajdujących się, a na tym również mi zależało.
Doszedłem w końcu do takiego rozwiązania i wszystko działa.
$file = scandir($dir);
usort($file, "strnatcmp");
Jeszcze raz dzięki wielkie