Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Jak segregować wielowymiarowe tablice?
MESSIAH :)
post 10.10.2015, 19:19:16
Post #1





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


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
                )

        )


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 10.10.2015, 19:49:01
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
Go to the top of the page
+Quote Post
MESSIAH :)
post 10.10.2015, 20:03:16
Post #3





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Witam serdecznie. Lepiej mi pomóż się z tym uporać. Jak mam posortować ten burdel? Masz jakieś pomysły?


--------------------
Go to the top of the page
+Quote Post
Crozin
post 10.10.2015, 20:12:09
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ć...
Go to the top of the page
+Quote Post
Pyton_000
post 10.10.2015, 20:13:30
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 biggrin.gif
Go to the top of the page
+Quote Post
MESSIAH :)
post 10.10.2015, 20:32:08
Post #6





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


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


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 10.10.2015, 20:37:44
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...
Go to the top of the page
+Quote Post
MESSIAH :)
post 10.10.2015, 20:51:49
Post #8





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


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


--------------------
Go to the top of the page
+Quote Post
kapslokk
post 10.10.2015, 20:57:36
Post #9





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Stwórz sobie tablicę w formie:
  1. 0 => '.',
  2. 1 => 'jakis_plik.php',
  3. 2 => 'jakis_folder/jakis_plik2.php'
  4. ...
  5. )


Posortuj sobie to, a pozniej z tak posortowanej tablicy stworz tablice wielowymiarowa.

Ten post edytował kapslokk 10.10.2015, 20:58:54
Go to the top of the page
+Quote Post
MESSIAH :)
post 10.10.2015, 21:14:09
Post #10





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


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.


--------------------
Go to the top of the page
+Quote Post
kapslokk
post 10.10.2015, 21:19:22
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?
Go to the top of the page
+Quote Post
MESSIAH :)
post 10.10.2015, 21:21:17
Post #12





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


No niestety nie umie bo się dopiero uczę.


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 10.10.2015, 21:50:58
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.
Go to the top of the page
+Quote Post
Pyton_000
post 10.10.2015, 21:55:24
Post #14





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


http://stackoverflow.com/questions/2930405...rectoryiterator
Go to the top of the page
+Quote Post
MESSIAH :)
post 10.10.2015, 22:08:03
Post #15





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Cytat(Tomplus @ 10.10.2015, 22:50:58 ) *
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.

Cytat(Pyton_000 @ 10.10.2015, 22:55:24 ) *

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


--------------------
Go to the top of the page
+Quote Post
Crozin
post 10.10.2015, 22:47:01
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
Go to the top of the page
+Quote Post
MESSIAH :)
post 11.10.2015, 13:20:38
Post #17





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


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ć.


--------------------
Go to the top of the page
+Quote Post
Crozin
post 11.10.2015, 16:22:17
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.
Go to the top of the page
+Quote Post
MESSIAH :)
post 12.10.2015, 20:53:25
Post #19





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


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?

Cytat(Crozin @ 11.10.2015, 17:22:17 ) *
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


--------------------
Go to the top of the page
+Quote Post
Crozin
post 12.10.2015, 21:19:57
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. strcasecmp
Cytat
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.
Pomijając fakt, że Windows od dawien dawna nie ma z DOS-em nic wspólnego, to przecież to jest dokładnie to co napisałem...
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 15.07.2025 - 11:44