Obsah fóra
PravidláRegistrovaťPrihlásenie




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

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.09
Prihlásený: 26.03.09
Príspevky: 15
Témy: 2
Príspevok NapísalOffline : 22.03.2009 18:12

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.


Offline

Správca fóra
Správca fóra
[VYRIESENE] rekurzivny vypis adresara

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 22.03.2009 18:55

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.09
Prihlásený: 26.03.09
Príspevky: 15
Témy: 2
Príspevok Napísal autor témyOffline : 22.03.2009 19:33

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


Offline

Správca fóra
Správca fóra
[VYRIESENE] rekurzivny vypis adresara

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 22.03.2009 19:46

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.09
Prihlásený: 26.03.09
Príspevky: 15
Témy: 2
Príspevok Napísal autor témyOffline : 22.03.2009 20:13

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


Offline

Správca fóra
Správca fóra
[VYRIESENE] rekurzivny vypis adresara

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 22.03.2009 20:38

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.09
Prihlásený: 26.03.09
Príspevky: 15
Témy: 2
Príspevok Napísal autor témyOffline : 22.03.2009 20:47

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

Offline

Správca fóra
Správca fóra
[VYRIESENE] rekurzivny vypis adresara

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 22.03.2009 20:52

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.09
Prihlásený: 26.03.09
Príspevky: 15
Témy: 2
Príspevok Napísal autor témyOffline : 22.03.2009 21:34

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 ?


Offline

Správca fóra
Správca fóra
[VYRIESENE] rekurzivny vypis adresara

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 22.03.2009 21:54

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.09
Prihlásený: 26.03.09
Príspevky: 15
Témy: 2
Príspevok Napísal autor témyOffline : 22.03.2009 22:09

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


Offline

Správca fóra
Správca fóra
[VYRIESENE] rekurzivny vypis adresara

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 22.03.2009 22:20

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.09
Prihlásený: 26.03.09
Príspevky: 15
Témy: 2
Príspevok Napísal autor témyOffline : 22.03.2009 22:45

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 :D 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
Odpovedať na tému [ Príspevkov: 13 ] 


Podobné témy

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

v PHP, ASP

3

608

16.12.2009 22:25

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. výpis obsahu adresára

v PHP, ASP

8

1618

29.04.2009 16:59

Draex Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. chyba v scripte na výpis adresára

v PHP, ASP

4

442

27.11.2009 21:17

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vypis obsahu adresara podla regularneho vyrazu

v PHP, ASP

0

262

23.11.2012 17:52

quark Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Výpis adresára cez PHP + Ochrana heslom

v Články

3

2778

27.04.2008 14:42

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vytvorenie adresára

v PHP, ASP

6

957

09.12.2009 16:39

Ďuri Zobrazenie posledných príspevkov

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

v PHP, ASP

11

592

29.11.2007 20:38

vl4kn0 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Gnome - zasifrovanie adresara

v Operačné systémy Unix a Linux

0

366

28.02.2010 20:16

SkyHiRider Zobrazenie posledných príspevkov

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

v Operačné systémy Unix a Linux

2

490

30.05.2011 22:17

blazej44800 Zobrazenie posledných príspevkov

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

v PHP, ASP

4

425

03.03.2012 17:49

phodinux Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. nahodny obrazok z adresara

v PHP, ASP

3

466

06.05.2009 23:39

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vytvorenie adresara s právami

v PHP, ASP

3

552

11.10.2010 18:12

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vytvorenie adresara vo VB6

v Delphi, Visual Basic

5

681

03.03.2012 0:03

marian_sk Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zamedzenie pristupu do adresara

v Operačné systémy Microsoft

0

275

18.09.2014 23:22

Nanosonda Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. full acces do win7 adresara

v Operačné systémy Microsoft

1

315

05.09.2011 11:49

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ako prejst z podadresara do adresara

v PHP, ASP

9

581

24.03.2010 17:40

rooobertek 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