![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) ![]() ![]() |
Chciałbym się dowiedzieć jak można posortować wielowymiarowe tablice mam na myśli kilku wymiarowe a nie dwie. Z tego co się orientuje to muszę każdy wymiar schować do nowo utworzonej tablicy i wtedy sortować i tak z każdym wymiarem?
Powiedzmy że tablica wygląda tak: Kod Array
( [0] => .htaccess. [1] => .htpasswd [2] => hhgute.hhi [3] => autoload.php [4] => config.php [5] => fp.map [6] => index.php [7] => test.php [8] => Array ( [0] => .pemhtaccess ) [9] => Array ( [con] => Array ( [ror] => Array ( [0] => Roctor.php [1] => Roe.php [2] => Derator.php [Dtor] => Array ( [0] => Mared.php [1] => Chased.php [2] => Gred.php [3] => Groed.php [4] => Restract.php ) [Dis] => Array ( [0] => Marked.php [1] => Chased.php [2] => Grouped.php [3] => Grouped.php [4] => Regt.php ) [3] => Badion.php [4] => Rouser.php [5] => fns.php [6] => bootstrap.php [Ror] => Array ( [0] => S.php ) [7] => Dispr.php ) ) [view] => Array ( [0] => viewLr.php [1] => view.php [2] => wid.php ) ) -------------------- TERA TRYBI.pl
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
A Ty dalej swoje...
http://php.net/manual/en/function.array-multisort.php |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) ![]() ![]() |
Witam serdecznie. Lepiej mi pomóż się z tym uporać. Jak mam posortować ten burdel? Masz jakieś pomysły?
-------------------- TERA TRYBI.pl
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Jak miałoby to być posortowane?
2. Dostałeś na tacy podaną funkcję, która najprawdopodobniej rozwiązuje Twój problem, więc może spróbuj z niej skorzystać... |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
A jeszcze lepiej posortować PRZED budowaniem takiej durnej tablicy... Ani ona przydatna, ani poręczna... tfu... zapomniałem... innowacyjny autoloader
![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) ![]() ![]() |
Niestety array_multisort() wywala mi błąd:
Fatal error: Uncaught exception 'ErrorException' with message 'Array to string conversion' kiedy użyje array_multisort($r, SORT_ASC, SORT_STRING); http://stackoverflow.com/questions/1790493...-while-installi Niestety jest to serwer na którym nie jestem adminem i nie mogę nic zmieniać. Posortować ale jak kiedy mam różne klucze id oraz stringi. Ten post edytował MESSIAH :) 10.10.2015, 20:38:21 -------------------- TERA TRYBI.pl
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Od rzyci strony się do tego zabierasz...
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) ![]() ![]() |
Masz proszę oto funkcja:
Kod $ritit = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST); $r = array(); foreach ($ritit as $splFileInfo) { $path = $splFileInfo->isDir() ? array($splFileInfo->getFilename() => array()) : array($splFileInfo->getFilename()); for ($depth = $ritit->getDepth() - 1; $depth >= 0; $depth--) { $path = array($ritit->getSubIterator($depth)->current()->getFilename() => $path); } $r = array_merge_recursive($r, $path); } No proszę to ugryźć samemu. Tablica może wygląda jak wygląda ale to dzięki funkcji array_merge_recursive($r, $path); Ten post edytował MESSIAH :) 10.10.2015, 20:52:24 -------------------- TERA TRYBI.pl
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) ![]() ![]() |
Stworzyłem takową lecz jest nie posortowana bo serwer chyba sortuje według czasu ostatniej modyfikacji. Więc nie jest posortowana według folderów.
-------------------- TERA TRYBI.pl
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
To sobie napisz sortowanie bąbelkowe na szybko. Serio nie potrafisz posortować alfabetycznie tablicy?
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) ![]() ![]() |
No niestety nie umie bo się dopiero uczę.
-------------------- TERA TRYBI.pl
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 875 Pomógł: 230 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
Pobierz sobie klasę: http://www.phpclasses.org/package/2056-PHP...dimensions.html
Powinna rozwiązać twoje problemy. |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) ![]() ![]() |
Pobierz sobie klasę: http://www.phpclasses.org/package/2056-PHP...dimensions.html Powinna rozwiązać twoje problemy. Niestety to sortowanie jest sztywne czyli sortuje po stałych elementach tablicy a w moim przypadku jest to wartość zmienna. Niestety ale to sortuje według daty bo tak najprościej. Udało mi się posortować w części alfabetycznie ale tylko w części bo funkcja jakoś nie chce tego łyknąć. Nie mam pojęcia dlaczego część tabeli została posegregowana. Segregacja ta nie rozpoznaje koniec folderu gdzie powinna posegregować i dopiero przejść do następnego subfolderu. Ten post edytował MESSIAH :) 10.10.2015, 22:21:16 -------------------- TERA TRYBI.pl
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Nadal nie podałeś nam jak finalnie ma być posortowana ta tablica...
2. Po co w ogóle korzystasz z RecursiveIteratorIterator skoro chwilę później (wewnątrz pętli) de facto niwelujesz jego działanie odtwarzając zagnieżdżoną strukturę katalogów? Skorzystanie z "gołego" RecursiveDirectoryIteratora byłoby dużo wygodniejsze. 3. Dlaczego raz w kluczach przechowujesz nazwę katalogu, raz nie przechowujesz nic (indeks numeryczny)? 4. Zdajesz sobie sprawę, że przypisywanie czegokolwiek do $path w przypadku czegoś co nie jest katalogiem mija się z celem, bo później zawsze to nadpisujesz w pętli for? 5. Rozumiesz w ogóle co robi Twój kod i za co odpowiedzialne są jego poszczególne elementy? Ten post edytował Crozin 10.10.2015, 22:47:36 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) ![]() ![]() |
Chcę to posortować tak jak system Windows: Według nazw plików oraz nazw katalogów.
Sorki za przykład ale pochodzą one z SOF, widocznie siedzą tam same nieuki. Aktualnie mam inny kod który rozbija na katalogi i na katalogi z plikami. Teraz pewnie wystarczy sprawdzać katalogi czy są puste i je sortować. -------------------- TERA TRYBI.pl
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Chcę to posortować tak jak system Windows: Według nazw plików oraz nazw katalogów. System Windows nie sortuje pilów. Nie robi tego również system plików (NTFS). Realizowane jest to dopiero przez program Explorer, a i ten domyślnie robi to inaczej niż podałeś. Wracając do tematu... wykorzystując RecursiveDirectoryIteratora sortuj elementy każdego katalogu z osobna (w ramach osobnej, lokalnej tablicy/kolekcji). Na końcu dostaniesz w efekcie wszystkie elementy posortowane wg tego samego wzoru.
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) ![]() ![]() |
Udaje mi się posortować lecz ostatni problem tkwi w dużych literach. Mam pliki których nazwy zaczynają się z dużych liter i teraz sprawa wygląda tak że Duże litery są posortowane najpierw a dopiero później małe. Jak to rozwiązać? Znalazłem zastosowanie: natcasesort(). Pytanie teraz jak sprawdzić dany katalog czy zawiera pliki?
System Windows nie sortuje pilów. Nie robi tego również system plików (NTFS). Realizowane jest to dopiero przez program Explorer, a i ten domyślnie robi to inaczej niż podałeś. Wydaje mi się iż nie masz racji. Dawniej był DOS i to on sortował pliki natomiast Windows jest graficzną nakładką DOSa i korzysta z jego zasobów a dopiero programy takie jak explorer korzystają np z funkcji sortowania. https://en.wikipedia.org/wiki/List_of_DOS_commands Ten post edytował MESSIAH :) 12.10.2015, 20:55:39 -------------------- TERA TRYBI.pl
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Udaje mi się posortować lecz ostatni problem tkwi w dużych literach. Mam pliki których nazwy zaczynają się z dużych liter i teraz sprawa wygląda tak że Duże litery są posortowane najpierw a dopiero później małe. Jak to rozwiązać? Do porównywania użyj jakiejś funkcji ignorującej wielkość znaków, np. strcasecmpCytat Pytanie teraz jak sprawdzić dany katalog czy zawiera pliki? Rzuć okiem na dokumentację RecursiveDirectoryIteratora.Cytat Cytat System Windows nie sortuje pilów. Nie robi tego również system plików (NTFS). Realizowane jest to dopiero przez program Explorer, a i ten domyślnie robi to inaczej niż podałeś. Wydaje mi się iż nie masz racji. Dawniej był DOS i to on sortował pliki natomiast Windows jest graficzną nakładką DOSa i korzysta z jego zasobów a dopiero programy takie jak explorer korzystają np z funkcji sortowania. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.07.2025 - 11:44 |