Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 14 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
usporiadanie suborov RecursiveDirectoryIterator uasort

Registrovaný: 28.02.09
Prihlásený: 19.02.18
Príspevky: 241
Témy: 56
Príspevok NapísalOffline : 09.01.2014 0:31

Cavte .. potrebujem poradit najst chybu, opravit, zbuzerovat - len potrebujem odpoved :D

cesta k suborom je ok.

chcel som to vyriesit tak ze to vsetko usporiadam podla nazvu (aj priecinky aj subory)
Kód:
uksort($files, 'strnatcmp');

a potom poposuvam priecinky do predu cez funkciu cmd()

prvotne usporiadanie:
mysecurity.zip, empty-lines.txt, test.xlsx, license.pdf, angukrus.docx, jellyfish.jpg, asd(priecinok)

po uksort() - vsetko OK:
angukrus.docx, asd(priecinok), empty-lines.txt, jellyfish.jpg, license.pdf, mysecurity.zip, test.xlsx

a chyba je vo funkcii cmd() .. aj ked by to malo fungovat pretoze je to rovnako napisane (teda podobne) ako na http://php.net/uasort

example na php.net
Kód:
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}


môj kód
Kód:
$iterator = new RecursiveDirectoryIterator($fullpath);
$files = iterator_to_array($iterator);
               
uksort($files, 'strnatcmp');

function cmp($a, $b)
{
                        if ($a->isDir() && !$b->isDir())
                        {
                                return -1;
                        }
                        elseif (!$a->isDir() && $b->isDir())
                        {
                                return 1;
                        }
                       
                        return 0;
}

uasort($files, 'cmp');


Offline

Užívateľ
Užívateľ
usporiadanie suborov RecursiveDirectoryIterator uasort

Registrovaný: 28.02.09
Prihlásený: 19.02.18
Príspevky: 241
Témy: 56
Príspevok Napísal autor témyOffline : 09.01.2014 0:43

a preco to pre boha usporiada inak v tychto pripadoch ... niesú tam splnene podmienky rovnako ?????

Kód:
function cmp($a, $b)
{
                        if ($a->isDir() && !$b->isDir())
                        {
                                return -1;
                        }
                        elseif (!$a->isDir() && $b->isDir())
                        {
                                return 1;
                        }
                       
                        return 0;
}
               
function cmp($a, $b)
{
                        if ($a->isDir() && $b->isDir())
                        {
                                return 0;
                        }
                       
                        return ($a->isDir() && !$b->isDir()) ? -1 : 1;
}


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 09.01.2014 9:04

V tej druhej (kratšej) funkcií nemáš správne vyriešené porovnanie file vs. file (splní sa vždy druhý return a vráti 1) Tam bude ten rozdiel.
Tá prvá mi na pohľad vyzerá správne, takže kde je problém neviem.

edit: Tak som si to vyskúšal a problémov vidím viac.
1. použitie porovnávača, ktorý je case sensitive. Tzn., že Z je ešte pred a (veľké Z pred malým a) a to je trochu blbosť. Riešením je použiť strnatcasecmp
2. uasort nefunguje tak, ako si predstavuješ. Ak chceš naozaj len priečinky presunúť na vrch zoznamu a zachovať ich poradie, použi vlastný sort, buď na princípe bubblesortu, alebo radixsortu (bubblesort je jednoduchší, radix je asymtoticky rýchlejší, ale to je pri malých poliach fuk)







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
usporiadanie suborov RecursiveDirectoryIterator uasort

Registrovaný: 28.02.09
Prihlásený: 19.02.18
Príspevky: 241
Témy: 56
Príspevok Napísal autor témyOffline : 09.01.2014 11:31

k tej funkcii strcasecmp - mas pravdu ale v mojom pripade pri uploade na nazov pouzivam "lowercase" cize to je jedno ale vymenim ju ....

Kód:
function cmp($a, $b)
{
                        if ($a->isDir() && $b->isDir())
                        {
                                return 0;
                        }
                       
                        return ($a->isDir() && !$b->isDir()) ? -1 : 1;
}


preco to podla teba vrati stale 1 ??

ak a & b su priecinky vrati 0
(inak)
ak "a" je priecinok & "b" nieje priecinok vrati -1 inak vrati 1

kde je problem ??


no ten sort budem musiet spravit vlastny .. ina moznost mi nakoniec neostane ... aj ked velmi rad by som vedel kde je chyba alebo preco to nefunguje tak ako ocakavam


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 09.01.2014 11:47

Písal som o porovnaní file vs. file. Napíš si tú úvahu, keď a je súbor a aj b je súbor. Malo by vrátiť 0, ale nevráti.
A celé ti to nefunguje preto, že ten uasort nerobí to, čo chceš. On to proste zosortí zase, len nechá indexy napokoji (čo je v podstate na nič, takže to len zosortí zase)







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
usporiadanie suborov RecursiveDirectoryIterator uasort

Registrovaný: 28.02.09
Prihlásený: 19.02.18
Príspevky: 241
Témy: 56
Príspevok Napísal autor témyOffline : 09.01.2014 12:06

jaaaaj no jasne ... zle som to pochopil


a k tomu sortu nikto nic ???


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 09.01.2014 12:08

akému sortu? nedostal si odpoveď?







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
usporiadanie suborov RecursiveDirectoryIterator uasort

Registrovaný: 28.02.09
Prihlásený: 19.02.18
Príspevky: 241
Témy: 56
Príspevok Napísal autor témyOffline : 09.01.2014 12:25

ano ze si to mam spravit sam je OK odpoved ... ale vysvetlenie, myslim preco to tak nefunguje alebo ako to funguje ....


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 09.01.2014 12:58

Citácia:
A celé ti to nefunguje preto, že ten uasort nerobí to, čo chceš. On to proste zosortí zase, len nechá indexy napokoji (čo je v podstate na nič, takže to len zosortí zase)

Takže to len zosortíš dva krát. Raz podľa abecedy a raz podľa tej svojej vlastnej funkcie. A keďže uasort používa quicksort, tak to zoradí zle (celé znovu)
V manuále je napísané toto
Citácia:
If two members compare as equal, their relative order in the sorted array is undefined.
http://cz1.php.net/uasort

To znamená, že radiaci aloritmus nie je stabilný (nezachováva relativnú pozíciu prvkov). Ak by si to druhý krát zoradil stabilným algoritmom, tak by to zoradilo správne (tj. napríklad spomenutý bubblesort, či radixsort)
Otázkou je, či nie je zbytočné to radiť dva krát, keď to môžeš zoradiť raz vlastným.


Naposledy upravil BX dňa 09.01.2014 18:33, celkovo upravené 1






_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
usporiadanie suborov RecursiveDirectoryIterator uasort

Registrovaný: 28.02.09
Prihlásený: 19.02.18
Príspevky: 241
Témy: 56
Príspevok Napísal autor témyOffline : 09.01.2014 13:13

ok .. diiik za odpovede :) .. pochopil som


Offline

Užívateľ
Užívateľ
usporiadanie suborov RecursiveDirectoryIterator uasort

Registrovaný: 28.02.09
Prihlásený: 19.02.18
Príspevky: 241
Témy: 56
Príspevok Napísal autor témyOffline : 09.01.2014 18:08

Kód:
$iterator = new RecursiveDirectoryIterator($fullpath);
$files = iterator_to_array($iterator);
               
uksort($files, 'strnatcasecmp');

$files_s = array_values($files);
               
for ($i=0; $i<(count($files_s)-1); $i++)
{
                        $a = $files_s[$i];
                        $b = $files_s[$i+1];
                                           
                        $j=$i;
                       
                        while ((!$a->isDir() && $b->isDir()) && isset($files_s[$j-1]))
                        {
                                $files_s[$j] = $b;
                                $files_s[$j+1] = $a;

                                $j--;

                                $a = $files_s[$j];
                                $b = $files_s[$j+1];
                        }
}


Offline

Užívateľ
Užívateľ
usporiadanie suborov RecursiveDirectoryIterator uasort

Registrovaný: 28.02.09
Prihlásený: 19.02.18
Príspevky: 241
Témy: 56
Príspevok Napísal autor témyOffline : 11.01.2014 14:01

no mam to zle ... priecinok "aa" sa nedostane pred prvy subor zacinajuci s "112..." .. pred vsetky nasledujuce sa priecinok dostane iba pred ten uplne prvy nie

Kód:
$iterator = new RecursiveDirectoryIterator($fullpath);
$files = iterator_to_array($iterator);
               
uksort($files, 'strnatcasecmp');

$files_s = array_values($files);
               
for ($i=0; $i<(count($files_s)-1); $i++)
{                       
                        $a = $files_s[$i];
                        $b = $files_s[$i+1];
                       
                        $j=$i;
                       
                        while ((!$a->isDir() && $b->isDir()))
                        {
                                $files_s[$j] = $b;
                                $files_s[$j+1] = $a;
                               
                                if (isset($files_s[$j-1]))
                                {
                                        $j--;

                                        $a = $files_s[$j];
                                        $b = $files_s[$j+1];
                                }
                                else
                                {
                                        break;
                                }
                        }
}


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 11.01.2014 14:14

Tak tam hľadaj len nejaký problém v hraniciach pola. Vo fore ideš do count()-1 a to býva často zdrojom takýchto problémov, keď si nedáš poriadne pozor na indexy.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
usporiadanie suborov RecursiveDirectoryIterator uasort

Registrovaný: 28.02.09
Prihlásený: 19.02.18
Príspevky: 241
Témy: 56
Príspevok Napísal autor témyOffline : 11.01.2014 14:51

uz som opravil :) .. prispevok predtym .... v podmienke while bol problem


Odpovedať na tému [ Príspevkov: 14 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Usporiadanie suborov

v Operačné systémy Microsoft

0

326

24.08.2012 18:50

dangerous_123 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. usporiadanie suborov v priecinku

v Operačné systémy Microsoft

0

369

19.12.2008 15:27

piaggio Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako pridat zopar suborov do image *.nrg suborov?

v Ostatné programy

7

1276

30.08.2007 12:33

paulix Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Usporiadanie čísiel

v Assembler, C, C++, Pascal, Java

26

934

28.03.2017 21:15

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Usporiadanie vysledkov

v JavaScript, VBScript, Ajax

3

318

25.12.2013 15:07

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Usporiadanie kablov

v Chladiče a všetky druhy chladenia

5

1825

20.10.2006 17:09

ScorpionSX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. usporiadanie divov

v HTML, XHTML, XML, CSS

6

641

15.12.2009 20:07

neopagan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Usporiadanie prvkov v poli

v Assembler, C, C++, Pascal, Java

4

487

13.04.2017 12:21

neutroN Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. usporiadanie hodnot z tabulky

v PHP, ASP

7

604

17.05.2008 22:26

emer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. usporiadanie obrazkov v galerii

v PHP, ASP

4

442

20.04.2010 20:52

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Porovnávanie a usporiadanie čísiel

v Ostatné programy

0

775

12.08.2008 19:13

MANIAC Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Usporiadanie pri tlaci (css,pdf)

v PHP, ASP

5

460

15.11.2009 22:25

Blackdevil Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. tablet android 5 - usporiadanie menu

v Smartfóny a tablety

0

343

07.05.2016 19:15

jjjano1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. select produktov a cien + usporiadanie

v Databázy

18

645

14.07.2014 12:46

DeeJay3 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Gmail a usporiadanie doručenej pošty

v Služby a webstránky

0

543

04.12.2011 13:13

S1anley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Usporiadanie fotiek v galerii - Wordpress

v Redakčné systémy

8

623

05.03.2014 11:40

mirom Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra