[ 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 | 2
NapísalOffline : 22.03.2009 18:12 | [VYRIESENE] rekurzivny vypis adresara

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 | 51
Bydlisko: Bratislava
NapísalOffline : 22.03.2009 18:55 | [VYRIESENE] rekurzivny vypis adresara

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 | 2
Napísal autor témyOffline : 22.03.2009 19:33 | [VYRIESENE] rekurzivny vypis adresara

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 | 51
Bydlisko: Bratislava
NapísalOffline : 22.03.2009 19:46 | [VYRIESENE] rekurzivny vypis adresara

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 | 2
Napísal autor témyOffline : 22.03.2009 20:13 | [VYRIESENE] rekurzivny vypis adresara

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 | 51
Bydlisko: Bratislava
NapísalOffline : 22.03.2009 20:38 | [VYRIESENE] rekurzivny vypis adresara

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 | 2
Napísal autor témyOffline : 22.03.2009 20:47 | [VYRIESENE] rekurzivny vypis adresara

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 | 51
Bydlisko: Bratislava
NapísalOffline : 22.03.2009 20:52 | [VYRIESENE] rekurzivny vypis adresara

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 | 2
Napísal autor témyOffline : 22.03.2009 21:34 | [VYRIESENE] rekurzivny vypis adresara

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 | 51
Bydlisko: Bratislava
NapísalOffline : 22.03.2009 21:54 | [VYRIESENE] rekurzivny vypis adresara

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 | 2
Napísal autor témyOffline : 22.03.2009 22:09 | [VYRIESENE] rekurzivny vypis adresara

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 | 51
Bydlisko: Bratislava
NapísalOffline : 22.03.2009 22:20 | [VYRIESENE] rekurzivny vypis adresara

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 | 2
Napísal autor témyOffline : 22.03.2009 22:45 | [VYRIESENE] rekurzivny vypis adresara

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
 [ Príspevkov: 13 ] 


[VYRIESENE] rekurzivny vypis adresara



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

644

16.12.2009 22:25

stenley

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

výpis obsahu adresára

v PHP, ASP

8

1659

29.04.2009 16:59

Draex

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

Výpis adresára cez PHP + Ochrana heslom

v Články

3

2820

27.04.2008 14:42

stenley

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

chyba v scripte na výpis adresára

v PHP, ASP

4

471

27.11.2009 21:17

Ďuri

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

Vypis obsahu adresara podla regularneho vyrazu

v PHP, ASP

0

291

23.11.2012 17:52

quark

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

Vytvorenie adresára

v PHP, ASP

6

995

09.12.2009 16:39

Ďuri

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

Vypisanie korenoveho adresara

v PHP, ASP

11

629

29.11.2007 20:38

vl4kn0

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

Gnome - zasifrovanie adresara

v Operačné systémy Unix a Linux

0

399

28.02.2010 20:16

SkyHiRider

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

Zmena prav adresara

v Operačné systémy Unix a Linux

2

520

30.05.2011 22:17

blazej44800

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

PHP odstranenie adresara

v PHP, ASP

4

463

03.03.2012 17:49

phodinux

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

nahodny obrazok z adresara

v PHP, ASP

3

500

06.05.2009 23:39

stenley

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

Vytvorenie adresara s právami

v PHP, ASP

3

580

11.10.2010 18:12

shaggy

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

Vytvorenie adresara vo VB6

v Delphi, Visual Basic

5

714

03.03.2012 0:03

marian_sk

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

Zamedzenie pristupu do adresara

v Operačné systémy Microsoft

0

321

18.09.2014 23:22

Nanosonda

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

full acces do win7 adresara

v Operačné systémy Microsoft

1

343

05.09.2011 11:49

shiro

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

ako prejst z podadresara do adresara

v PHP, ASP

9

633

24.03.2010 17:40

rooobertek



© 2005 - 2024 PCforum, edited by JanoF