IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Soubory ve všech podadresářích do pole

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Geekský Kodér:14.2.2015 19:47

Ahoj, chtěl bych se zeptat, jestli je možnost vypsat všechny soubory jednoho adresáře do pole? Vím, že to jde se scandir(), jenomže potřebuji projet i podadresáře, jejichž názvy dopředu nevím - vytvoří je uživatel. Děkuji za tipy :)

 
Odpovědět
14.2.2015 19:47
Avatar
d4rkw34v3r
Tvůrce
Avatar
d4rkw34v3r:14.2.2015 20:01

Ahoj, mrkni sem do dokumentace http://php.net/….scandir.php#…

Řeší to konkrétně tvůj problém.
Případně další příklady níže v komentářích.

Editováno 14.2.2015 20:02
 
Nahoru Odpovědět
14.2.2015 20:01
Avatar
Odpovídá na d4rkw34v3r
Geekský Kodér:15.2.2015 12:45

Kouknu na to, díky

 
Nahoru Odpovědět
15.2.2015 12:45
Avatar
alfonz
Člen
Avatar
alfonz:15.2.2015 23:28

V podstatě si vytvoříš funkci, která spustí scandir() a pak ve všech složkách co to najde, zavolá sama sebe a výsledek uloží do pole. Samozřejmě tato funkce vrací pole.

Nahoru Odpovědět
15.2.2015 23:28
lmao
Avatar
Geekský Kodér:17.2.2015 21:29

Dobře, zkusil jsem si něco napsat po svém a vyhazuje to toto pole :

Array ( [cs] => Array ( [podslozka] => Array ( [0] => another_file.json [1] => another_file_2.json ) [0] => welcome.json ) [0] => loading.gif )

Horší je, že bych potřeboval, aby došlo k vypsání souborů včetně cesty k nim. Mám metodu v třídě s tímto kódem :

protected static function arrayDirTree($dir_array) {
        foreach($dir_array as $key => $value) {
                if(is_array($value)) {
                        self::arrayDirTree($value);
                } else {
                        echo $value.'<br />';
                }
        }
}

která vyhazuje jen názvy souborů. Nevíte, jak připsat i cestu? Napadlo mě před to přidat název klíče, což je v podstatě jméno adresáře, ale to vypíše jen poslední nadřazený adresář. Jsem v koncích.

Editováno 17.2.2015 21:30
 
Nahoru Odpovědět
17.2.2015 21:29
Avatar
shaman
Člen
Avatar
Odpovídá na Geekský Kodér
shaman:17.2.2015 22:25

Skus toto:

<?php

$dir_array =
    [
        'cs' =>
            [
                'podslozka' =>
                    [
                        '0' => 'another_file.json',
                        '1' => 'another_file_2.json'
                    ],
                '0' => 'welcome.json'
            ],
        '0' => 'loading.gif'
    ];

class TotalCommander
{
    public static function arrayDirTree($dir_array, $folder = '')
    {
        foreach ($dir_array as $key => $value) {
            if (is_array($value)) {
                $fullFolder = $folder.'/'.$key;
                self::arrayDirTree($value, $fullFolder);
            } else {
                echo $folder.'/'.$value . '<br />';
            }
        }
    }
}

TotalCommander::arrayDirTree($dir_array);

Cosi som si dorobil aby mi to vyhadzovalo nejake vysledky, ale teraz mi to pise toto:

/cs/podslozka/another_file.json
/cs/podslozka/another_file_2.json
/cs/welcome.json
/loading.gif
Nahoru Odpovědět
17.2.2015 22:25
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
shaman
Člen
Avatar
Odpovídá na Geekský Kodér
shaman:17.2.2015 22:28

Ozaj este ma trochu zarazilo ze to mas ako protected static funkciu. Protected funkciu nevies zavolat mimo triedy, takze tu funkciu volas len z vnutra triedy? Ak ano, tak ju uz mas inicializovanu, nie? Preco potom static?

Nahoru Odpovědět
17.2.2015 22:28
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.