Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Autor | Správa |
---|
Registrovaný: 22.03.09 Prihlásený: 26.03.09 Príspevky: 15 Témy: 2 | 2 |
Zdravim,
do pola som vlozil vystup scriptu, ktory precita adresar rekurzivne, moj problem je napisat cyklus, ktorym vy som tento vystup usporiadal a zobrazil podla potreby.
Obsah pola:
Kód: Array ( [0] => Array ( [fullpath] => ./gallery/2009/testz.txt [type] => file [name] => testz.txt [extension] => txt )
[1] => Array ( [fullpath] => ./gallery/2009 [type] => dir [level] => 3 [name] => 2009 )
[2] => Array ( [fullpath] => ./gallery/2008/test.txt [type] => file [name] => test.txt [extension] => txt )
[3] => Array ( [fullpath] => ./gallery/2008/subdir2/test3.txt [type] => file [name] => test3.txt [extension] => txt )
[4] => Array ( [fullpath] => ./gallery/2008/subdir2 [type] => dir [level] => 4 [name] => subdir2 )
[5] => Array ( [fullpath] => ./gallery/2008/subdir/test2.txt [type] => file [name] => test2.txt [extension] => txt )
[6] => Array ( [fullpath] => ./gallery/2008/subdir [type] => dir [level] => 4 [name] => subdir )
[7] => Array ( [fullpath] => ./gallery/2008 [type] => dir [level] => 3 [name] => 2008 )
)
Usporiadany vystup pola ($pole[$i][fullpath]): Kód: ./gallery/2009/testz.txt ./gallery/2009 ./gallery/2008/test.txt ./gallery/2008/subdir2/test3.txt ./gallery/2008/subdir2 ./gallery/2008/subdir/test2.txt ./gallery/2008/subdir ./gallery/2008
Tento usporiadany vystup chcem zobrazit v nasledovnom formate na web: Kód: 2009 --testz.txt 2008 --subdir ----test2.txt ----dalsi subor podla potreby --subdir2 ----test3.txt ----dalsi subor podla potreby
atd. vysmolil som to pomocov for a podmienok ale je to velmi zle riesenie, ktore je pomale a koniec koncov neefektivne a hlupe (kod sluzi na ukazku logiky): Kód: for($i=0; $i<$count_array; $i++) if() echo $rok; for($j=0; $j<$count_array; $j++) if() echo $adresar; for($k=0; $k<$count_array; $k++) ... ...
Pomoze mi niekto prosim zosnovat php kod pre vystup prosim ? Nejako neviem najst riesenie.
vopred vrela vdaka.
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
a co tak to vypisovat rovno pri prechadzani adresarovej struktury? imho je dost zbytocne to najskor ulozit do pola a potom to podla nieco zas usporiadavat a vypisovat...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.09 Prihlásený: 26.03.09 Príspevky: 15 Témy: 2 | 2 |
stenley píše: a co tak to vypisovat rovno pri prechadzani adresarovej struktury? imho je dost zbytocne to najskor ulozit do pola a potom to podla nieco zas usporiadavat a vypisovat...
mas iny napad ako rekurzivne prescanovat vsetky adresare, ak nevies kolko mas podadresarov a ako hlboko su ? ono volam rekurzivne funkciu na citanie adresara, vzdy ak sa najde adresar, zavolaj samu seba a precitaj adresar, ono je to v poli tak ci tak, pretoze obsah podadresara je v prvku pola, v ktorom je obsah adresara, v podstate mi ide len u upravu vystupu
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
neboj, viem, co znamena rekurzia... ale asi si ma celkom nepochopil, ako som to myslel... predpokladam, ze v tej rekurzivnej funkcii ukladas adresare a ich obsah do pola... no tak namiesto toho, aby si ich ukladal, tak to budes rovno vypisovat... ak ti ide o efektivnost a nebudes robit so zistenymi informaciami "brutalne" operacie, tak nevidim dovod na pouzitie pola a jeho neskorsie prechadzanie pre potreby vypisu...
navyse, struktura pola, kam ukladas informacie o adresaroch a ich obsahu, nie je zvolena velmi stastne, skor by som pouzil take viacrozmerne pole, ktore by si mohol prechadzat taktiez rekurzivne...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.09 Prihlásený: 26.03.09 Príspevky: 15 Témy: 2 | 2 |
stenley píše: neboj, viem, co znamena rekurzia... ale asi si ma celkom nepochopil, ako som to myslel... predpokladam, ze v tej rekurzivnej funkcii ukladas adresare a ich obsah do pola... no tak namiesto toho, aby si ich ukladal, tak to budes rovno vypisovat... ak ti ide o efektivnost a nebudes robit so zistenymi informaciami "brutalne" operacie, tak nevidim dovod na pouzitie pola a jeho neskorsie prechadzanie pre potreby vypisu...
navyse, struktura pola, kam ukladas informacie o adresaroch a ich obsahu, nie je zvolena velmi stastne, skor by som pouzil take viacrozmerne pole, ktore by si mohol prechadzat taktiez rekurzivne...
no, ukladanie do pola a neskorsie spracovanie pola volim preto, lebo chcem funkciu na citanie dat volat z viacerych funkcii na operacie so subormi (raz pouzijem ako backend pre galeriu, raz ako vystup pre nejaky katalog, v skratke, univerzalny backend
ad ukladanie do viacrozmerneho pola: vystup samotnej funkcie je v takomto poli ale jeho rozmerovost rastie s kazdym podadresarom exponencialne, teda pole, ktore som uviedol na zaciatok je prehnane cez array_merge() rekurzivne, teda mi z toho vznikne krasne dvojrozmerne pole ako som uviedol priklad, tak ci onak, funguje to krasne, problem je len pri konkretnom type zobrazenie ako som uviedol, ze chcem dosiahnut
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
vysledne 2-rozmerne pole budes musiet zasa usporiadavat, aby si dostal pozadovany vystup, co su dalsie a dalsie zbytocne operacie naviac...
stale ale nechapem, preco nechces pouzit pole, ktore ti vygenerovala rekurzivna funkcia...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.09 Prihlásený: 26.03.09 Príspevky: 15 Témy: 2 | 2 |
stenley píše: vysledne 2-rozmerne pole budes musiet zasa usporiadavat, aby si dostal pozadovany vystup, co su dalsie a dalsie zbytocne operacie naviac... stale ale nechapem, preco nechces pouzit pole, ktore ti vygenerovala rekurzivna funkcia...
toto je vystup z samotneho neupravovaneho rekurzivneho vystupu:
Kód: Array ( [0] => Array ( [path] => ./gallery/2009 [content] => Array ( [0] => Array ( [path] => ./gallery/2009/testz.txt )
)
)
[1] => Array ( [path] => ./gallery/2008 [content] => Array ( [0] => Array ( [path] => ./gallery/2008/subdir [content] => Array ( [0] => Array ( [path] => ./gallery/2008/subdir/test2.txt )
)
)
[1] => Array ( [path] => ./gallery/2008/subdir2 [content] => Array ( [0] => Array ( [path] => ./gallery/2008/subdir2/test3.txt )
)
)
[2] => Array ( [path] => ./gallery/2008/test.txt )
)
)
)
Pripajam aj samotny kod celej operacie - este neokomentovany(v stadiu vyvoja): Kód: function read_dir_recur($directory) { if(substr($directory,-1)=="/") $directory=substr($directory,0,-1); $dir=opendir($directory); if(!file_exists($directory) || !is_dir($directory)): return FALSE; elseif (is_readable($directory)): while ($file=readdir($dir)) if ($file!="." && $file!=".."): $fullpath=$directory."/".$file; if (is_dir($fullpath)) $content[]=array( "path"=>$fullpath, "content"=>read_dir_recur($fullpath)); else $content[]=array( "path"=>$fullpath); endif; closedir($dir); return $content; else: return FALSE; endif; }
function array_to_values_recur($content) { $flat = array(); foreach ($content as $value) if (is_array($value)) $flat = array_merge($flat, array_to_values_recur($value)); else $flat[] = $value; return $flat; }
function file_list($directory) { $items = read_dir_recur($directory); $items = array_to_values_recur($items); rsort($items);
foreach($items as $item): if(is_dir($item)) $file_item[]=array( "fullpath"=>$item, "type"=>"dir", "level"=>count(explode("/",$item)), "name"=>end(explode("/",$item))); else $file_item[]=array( "fullpath"=>$item, "type"=>"file", "name"=>end(explode("/",$item)), "extension"=>end(explode(".",$item))); endforeach; return $file_item; }
function show_gallery() { $item=file_list("./gallery"); ... }
Naposledy upravil Kiwwiaq dňa 22.03.2009 20:52, celkovo upravené 1
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
no a? jednoducho pouzijes rekurziu na vypis... zbytocne to komplikujes s tym mergovanim...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.09 Prihlásený: 26.03.09 Príspevky: 15 Témy: 2 | 2 |
stenley píše: no a? jednoducho pouzijes rekurziu na vypis... zbytocne to komplikujes s tym mergovanim... \
hmm, to by slo, dikes za typ zatial, skusim to, vyzera to celkom realne, no pri vypise pouzivam rsort(), teda ak mam galeriu delenu po rokoch chcem aby sa zobrazovalo zostupne, nie vzostupne, myslis ze to pojde ?
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
mohlo by to ist cez array_multisort, pripadne priamo pri citani obsahu adresara pouzit scandir, kde si nastavis 2.parameter
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.09 Prihlásený: 26.03.09 Príspevky: 15 Témy: 2 | 2 |
stenley píše: mohlo by to ist cez array_multisort, pripadne priamo pri citani obsahu adresara pouzit scandir, kde si nastavis 2.parameter
sorting_order mi znie ako lepsie riesenie, ako este raz prehnat vystup cez nejaku funkciu koly sortovaniu
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
ved pred tym si to tiez dodatocne sortoval, vtedy to bolo ok? existuje viacero moznych rieseni, len si treba vybrat tu spravnu a vyhovujucu pre konkretny problem...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.09 Prihlásený: 26.03.09 Príspevky: 15 Témy: 2 | 2 |
stenley píše: ved pred tym si to tiez dodatocne sortoval, vtedy to bolo ok? existuje viacero moznych rieseni, len si treba vybrat tu spravnu a vyhovujucu pre konkretny problem...
vtedy som sortoval pred vypluvanim vystupu, teraz budem sortovat priamo pri citani dobry farar sa do smrti uci pisem pre radost a z nudy, funkcie hadzem do kniznice, ktora aj tak skonci niekde na nete for free
_________________ CPU: Intel C2D E6320@2.8GHz | MB: gigabyte 965P-S3 | VGA: Sapphire Ati HD4850 512MB | RAM: 4x 1GB DDR2 400 MHz | HDD: 2x WD + 1x Samsung SpinPoint F1 = 1.75TB | DVD: LG GSA-H10N | CD-RW: ASUS CRW-5224A | Keyboard: Logitech G15 | Mouse: Logitech G5 | CASE: Gigabyte Triton | LCD: 19'' BENQ FP93G S | Repro: Logitech Z-5500 |
|
Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v PHP, ASP | 3 | 644 | 16.12.2009 22:25 stenley | | v PHP, ASP | 8 | 1659 | 29.04.2009 16:59 Draex | | v Články | 3 | 2820 | 27.04.2008 14:42 stenley | | v PHP, ASP | 4 | 471 | 27.11.2009 21:17 Ďuri | | v PHP, ASP | 0 | 291 | 23.11.2012 17:52 quark | | v PHP, ASP | 6 | 995 | 09.12.2009 16:39 Ďuri | | v PHP, ASP | 11 | 629 | 29.11.2007 20:38 vl4kn0 | | v Operačné systémy Unix a Linux | 0 | 399 | 28.02.2010 20:16 SkyHiRider | | v Operačné systémy Unix a Linux | 2 | 520 | 30.05.2011 22:17 blazej44800 | | v PHP, ASP | 4 | 463 | 03.03.2012 17:49 phodinux | | v PHP, ASP | 3 | 500 | 06.05.2009 23:39 stenley | | v PHP, ASP | 3 | 580 | 11.10.2010 18:12 shaggy | | v Delphi, Visual Basic | 5 | 714 | 03.03.2012 0:03 marian_sk | | v Operačné systémy Microsoft | 0 | 321 | 18.09.2014 23:22 Nanosonda | | v Operačné systémy Microsoft | 1 | 343 | 05.09.2011 11:49 shiro | | v PHP, ASP | 9 | 633 | 24.03.2010 17:40 rooobertek |
|