| | |
| Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Autor | Správa |
---|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 |
Cavte .. potrebujem poradit najst chybu, opravit, zbuzerovat - len potrebujem odpoved 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/uasortexample 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');
|
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | Napísal autor témy DeeJay3: 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; }
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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! |
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | Napísal autor témy DeeJay3: 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
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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! |
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | Napísal autor témy DeeJay3: 09.01.2014 12:06 | |
|
jaaaaj no jasne ... zle som to pochopil
a k tomu sortu nikto nic ???
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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! |
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | Napísal autor témy DeeJay3: 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 ....
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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/uasortTo 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! |
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | Napísal autor témy DeeJay3: 09.01.2014 13:13 | |
|
ok .. diiik za odpovede .. pochopil som
|
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | Napísal autor témy DeeJay3: 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]; } }
|
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | Napísal autor témy DeeJay3: 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; } } }
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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! |
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | Napísal autor témy DeeJay3: 11.01.2014 14:51 | |
|
uz som opravil .. prispevok predtym .... v podmienke while bol problem
|
|
| Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Usporiadanie suborov v Operačné systémy Microsoft | 0 | 326 | 24.08.2012 18:50 dangerous_123 | | usporiadanie suborov v priecinku v Operačné systémy Microsoft | 0 | 369 | 19.12.2008 15:27 piaggio | | Ako pridat zopar suborov do image *.nrg suborov? v Ostatné programy | 7 | 1276 | 30.08.2007 12:33 paulix | | Usporiadanie čísiel v Assembler, C, C++, Pascal, Java | 26 | 934 | 28.03.2017 21:15 BX | | Usporiadanie vysledkov v JavaScript, VBScript, Ajax | 3 | 318 | 25.12.2013 15:07 shaggy | | Usporiadanie kablov v Chladiče a všetky druhy chladenia | 5 | 1825 | 20.10.2006 17:09 ScorpionSX | | usporiadanie divov v HTML, XHTML, XML, CSS | 6 | 641 | 15.12.2009 20:07 neopagan | | Usporiadanie prvkov v poli v Assembler, C, C++, Pascal, Java | 4 | 487 | 13.04.2017 12:21 neutroN | | usporiadanie hodnot z tabulky v PHP, ASP | 7 | 604 | 17.05.2008 22:26 emer | | usporiadanie obrazkov v galerii v PHP, ASP | 4 | 442 | 20.04.2010 20:52 stenley | | Porovnávanie a usporiadanie čísiel v Ostatné programy | 0 | 775 | 12.08.2008 19:13 MANIAC | | Usporiadanie pri tlaci (css,pdf) v PHP, ASP | 5 | 460 | 15.11.2009 22:25 Blackdevil | | tablet android 5 - usporiadanie menu v Smartfóny a tablety | 0 | 343 | 07.05.2016 19:15 jjjano1 | | select produktov a cien + usporiadanie v Databázy | 18 | 645 | 14.07.2014 12:46 DeeJay3 | | Gmail a usporiadanie doručenej pošty v Služby a webstránky | 0 | 543 | 04.12.2011 13:13 S1anley | | Usporiadanie fotiek v galerii - Wordpress v Redakčné systémy | 8 | 623 | 05.03.2014 11:40 mirom |
| 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
|
|