[ 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: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
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...


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
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: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
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...


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
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: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
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...


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
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: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 22.03.2009 20:52 | [VYRIESENE] rekurzivny vypis adresara

no a? jednoducho pouzijes rekurziu na vypis... zbytocne to komplikujes s tym mergovanim...


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
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: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
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


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
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: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
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...


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
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

359

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

1345

29.04.2009 16:59

Draex

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

chyba v scripte na výpis adresára

v PHP, ASP

4

272

27.11.2009 21:17

Ďuri

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

Výpis adresára cez PHP + Ochrana heslom

v Články

3

2455

27.04.2008 14:42

stenley

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

Vypis obsahu adresara podla regularneho vyrazu

v PHP, ASP

0

120

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

750

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

358

29.11.2007 20:38

vl4kn0

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

PHP odstranenie adresara

v PHP, ASP

4

233

03.03.2012 17:49

phodinux

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

Gnome - zasifrovanie adresara

v Operačné systémy Unix a Linux

0

171

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

343

30.05.2011 22:17

blazej44800

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

Zamedzenie pristupu do adresara

v Operačné systémy Microsoft

0

65

18.09.2014 23:22

Nanosonda

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

nahodny obrazok z adresara

v PHP, ASP

3

308

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

379

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

491

03.03.2012 0:03

imrich

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

full acces do win7 adresara

v Operačné systémy Microsoft

1

156

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

327

24.03.2010 17:40

rooobertek



© 2005 - 2017 PCforum, edited by JanoF