Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Niestandardowe sortowanie
kornel-php
post 17.09.2007, 20:38:00
Post #1





Grupa: Zarejestrowani
Postów: 210
Pomógł: 20
Dołączył: 7.07.2006
Skąd: Krotoszyn

Ostrzeżenie: (0%)
-----


Witam! Otóż mój problem wygląda tak:

Mam katalog, w którym są inne katalogi z plikami, wygląda to tak:

katalog 'a' zawiera pliki: a.pdf, g.pdf i j.pdf
katalog 'b' zawiera pliki: c.pdf, u.pdf, z.pdf
katalog 'c' zawiera pliki: b.pdf, d.pdf, e.pdf

Teraz wrzucam wszystko do tablicy i sortuje funkcją sort, to otrzymuję:

Kod
a/a.pdf
a/g.pdf
a/j.pdf
b/c.pdf
b/u.pdf
b/z.pdf
c/b.pdf
c/d.pdf
c/e.pdf


A chciałbym otrzymać to posortowane w następujący sposób:

Kod
a/a.pdf
c/b.pdf
b/c.pdf
c/d.pdf
c/e.pdf
...


Jest taka możliwość, jeśli tak to prosiłbym o pomoc, z góry dziękuję!


--------------------
:)
Go to the top of the page
+Quote Post
franki01
post 17.09.2007, 20:53:40
Post #2





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Te nazwy plikow w roznych katalogach moga sie powtarzac?
Go to the top of the page
+Quote Post
kornel-php
post 17.09.2007, 20:55:12
Post #3





Grupa: Zarejestrowani
Postów: 210
Pomógł: 20
Dołączył: 7.07.2006
Skąd: Krotoszyn

Ostrzeżenie: (0%)
-----


Aktualnie się nie powtarzają i raczej nie powinny


--------------------
:)
Go to the top of the page
+Quote Post
em1X
post 17.09.2007, 20:55:42
Post #4





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


1) więc pobierz do tablicy nazwy katalogów - posortuj ją
2) dla każdego folderu teraz posortuj pliki
3) połącz tablice


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post
kornel-php
post 17.09.2007, 20:59:33
Post #5





Grupa: Zarejestrowani
Postów: 210
Pomógł: 20
Dołączył: 7.07.2006
Skąd: Krotoszyn

Ostrzeżenie: (0%)
-----


Kod
1) więc pobierz do tablicy nazwy katalogów - posortuj ją
2) dla każdego folderu teraz posortuj pliki
3) połącz tablice


Tzn? Odpalam katalog główny, wyszukuje w nim folderów (jakaś pętelka), później z każdego folderu tworzę posortowaną tablice plików?

Jest to jakieś rozwiązanie... Najlepsza dla mnie byłaby funkcja sortująca elementy tablicy biorąc pod uwagę załóżmy ostatnie 5 znaków z elementu... Niestety nie mogę nic takiego namierzyć, więc chyba pokusze się o Twoje rozwiązanie...


--------------------
:)
Go to the top of the page
+Quote Post
starach
post 17.09.2007, 21:04:32
Post #6





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


Jako tako działa.
  1. <?php
  2. function porownaj($a, $b)
  3. {
  4. $a = explode('/', $a);
  5. $b = explode('/', $b);
  6. return strcmp(max($a), max($b));
  7. }
  8. $arr = array();
  9. $arr[] = 'a/a.pdf';
  10. $arr[] = 'a/g.pdf';
  11. $arr[] = 'a/j.pdf';
  12. $arr[] = 'b/c.pdf';
  13. $arr[] = 'b/u.pdf';
  14. $arr[] = 'b/z.pdf';
  15. $arr[] = 'c/b.pdf';
  16. $arr[] = 'c/d.pdf';
  17. $arr[] = 'c/e.pdf';
  18.  
  19. usort($arr, 'porownaj');
  20. var_dump($arr);
  21. ?>
edit>
Wynik:
Kod
array
  0 => string 'a/a.pdf' (length=7)
  1 => string 'c/b.pdf' (length=7)
  2 => string 'b/c.pdf' (length=7)
  3 => string 'c/d.pdf' (length=7)
  4 => string 'c/e.pdf' (length=7)
  5 => string 'a/g.pdf' (length=7)
  6 => string 'a/j.pdf' (length=7)
  7 => string 'b/u.pdf' (length=7)
  8 => string 'b/z.pdf' (length=7)


Ten post edytował orglee 17.09.2007, 21:05:44
Go to the top of the page
+Quote Post
franki01
post 17.09.2007, 21:04:47
Post #7





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Na poczatek w $allFiles jest ta lista plikow

  1. <?php
  2. $filesDir = array();
  3.  
  4. foreach($allFiles as $file) {
  5. $ex = explode("/", $file);
  6. $filesDir[$ex[0]] = $ex[1];
  7. }
  8.  
  9. asort($filesDir);
  10.  
  11. $allFiles = array();
  12.  
  13. foreach($filesDir as $dir => $file) {
  14. $allFiles[] = $dir."/".$file;
  15. }
  16. ?>


Na zakonczenie w $allFiles masz posegregowana liste wg nazwy plikow..
Go to the top of the page
+Quote Post
kornel-php
post 17.09.2007, 21:10:29
Post #8





Grupa: Zarejestrowani
Postów: 210
Pomógł: 20
Dołączył: 7.07.2006
Skąd: Krotoszyn

Ostrzeżenie: (0%)
-----


  1. <?php
  2. function porownaj($a, $b)
  3. {
  4. $a = explode('/', $a);
  5. $b = explode('/', $b);
  6. return strcmp(max($a), max($b));
  7. }
  8. $arr = array();
  9. $arr[] = 'a/a.pdf';
  10. $arr[] = 'a/g.pdf';
  11. $arr[] = 'a/j.pdf';
  12. $arr[] = 'b/c.pdf';
  13. $arr[] = 'b/u.pdf';
  14. $arr[] = 'b/z.pdf';
  15. $arr[] = 'c/b.pdf';
  16. $arr[] = 'c/d.pdf';
  17. $arr[] = 'c/e.pdf';
  18.  
  19. usort($arr, 'porownaj');
  20. ?>



A jak wyglądałby ten kod dla plików o ścieżce 'katalog1/kat2/kat3/kat4/kat.../nazwa.pliku'?

Teraz narodził mi się taki własnie problem... :/

Ten post edytował kornel-php 17.09.2007, 21:47:02


--------------------
:)
Go to the top of the page
+Quote Post
qqrq
post 17.09.2007, 22:20:12
Post #9





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Cytat(kornel-php @ 17.09.2007, 22:10:29 ) *
A jak wyglądałby ten kod dla plików o ścieżce 'katalog1/kat2/kat3/kat4/kat.../nazwa.pliku'?


Duuużo bardziej skomplikowanie... winksmiley.jpg A poważnie - wymyślenie takiej funkcji dla dowolnej ilości slashy to dość... zajmujący problem (chyba, że sortujesz zawsze po nazwie pliku i olewasz katalogi - wtedy prościej.


--------------------
Go to the top of the page
+Quote Post
kornel-php
post 18.09.2007, 14:06:39
Post #10





Grupa: Zarejestrowani
Postów: 210
Pomógł: 20
Dołączył: 7.07.2006
Skąd: Krotoszyn

Ostrzeżenie: (0%)
-----


Zdecydowanie olewam katalogi, mnie interesuje tylko nazwa pliku. Jakieś pomysły?


--------------------
:)
Go to the top of the page
+Quote Post
qqrq
post 19.09.2007, 20:20:28
Post #11





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Jeśli olewasz katalogi, to można to zrobić "a 'la kornel-php":

  1. <?php
  2. function porownaj($a, $b) { return strcmp(substr($a,strrpos($a,'/')+1), substr($b,strrpos($b,'/')+1)); }
  3. $arr = array();
  4. $arr[] = 'a/a.pdf';
  5. $arr[] = 'a/g.pdf';
  6. $arr[] = 'a/j.pdf';
  7. $arr[] = 'b/c.pdf';
  8. $arr[] = 'b/u.pdf';
  9. $arr[] = 'b/z.pdf';
  10. $arr[] = 'c/b.pdf';
  11. $arr[] = 'c/d.pdf';
  12. $arr[] = 'c/e.pdf';
  13.  
  14. usort($arr, 'porownaj');
  15. ?>


Powinno działać...


--------------------
Go to the top of the page
+Quote Post
kornel-php
post 20.09.2007, 16:14:25
Post #12





Grupa: Zarejestrowani
Postów: 210
Pomógł: 20
Dołączył: 7.07.2006
Skąd: Krotoszyn

Ostrzeżenie: (0%)
-----


Wielkie dzięki! Działa idealnie, jak chciałem!

Ten post edytował kornel-php 20.09.2007, 16:27:00


--------------------
:)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:09