Creare Array da albero di cartelle

ciao,

ho già cercato sul forum, ma non ho trovato quello che fa al caso mio...

Forse il titolo non è molto esplicativo, comunque, dovrei creare un array con dentro delle immagini.

Faccio un esempio:

cartella1

--img1

--img2

---sottocartella1

------img3

------img4

cartella2

--img1

----sottocartella2

------img2

cartella3

--img3

dovrei recuperare un array così composto:

$array['cartella1'][0] = img1;
$array['cartella1'][1] = img2;
$array['cartella1']['sottocartella1'] = img3;
$array['cartella1']['sottocartella1'] = img4;


$array['cartella2'][0] = img1;
$array['cartella2']['sottocartella2'] = img2;

$array['cartella3'][0] = img1;

in rete ho trovato questo:

function read_dir ( $path )
{                      
   $handle = opendir( $path ) ;
   
   while ( $file = readdir( $handle ) )
        {                 
           if ( $file != "."  && $file != ".." && $file != NULL && $file != 'NULL' )
             {
                echo $file."<br>";
                if ( is_dir( $path . $file ) )
                  {
                     
                    read_dir( $path . $file ) ;
                  }
             }
       }
}


read_dir($path);

solo che non mi riconosce le sotto cartelle come directory e non entra a leggerne il contenuto...

grazie.

ciao

Lore

inviato 9 anni fa
Lore
Lore
1
X 0 X

forse al posto di $path . $file dovresti usare $path . "/" . $file o qualcosa del genere

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

forse al posto di $path . $file dovresti usare $path . "/" . $file o qualcosa del genere

 :bye:

ciao gianni...

quello nn so perchè il path iniziale lo passo come /aaa/bbb/ccc/ quindi con lo slash finale...

supponendo che $file sia img1.jpg

$path . $file = "/aaa/bbb/ccc/"."img1.jpg";

credo che il problema sia che non prenda le varie sottocartelle come directory...ma solo come file,

ossia che qui:

if ( is_dir( $path . $file ) )

non assuma mai il valore:

if ( is_dir("/......./cartella1/sottocartella1"))

ma rimanga sempre al massimo al primo livello:

if ( is_dir("/......./cartella1"))

forse è questo il prob....

vedrò se riesco a risolverlo in qualche modo...se qualcuno ha qualche idea non lo disprezzo di certo  O0

ciao e grazie

Lore

risposto 9 anni fa
Lore
Lore
1
X 0 X

prova a mettere un echo per vedere come viene costruito il path annidato. credo comunque che lo slash vada messo nella costruzione del percorso

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

prova a mettere un echo per vedere come viene costruito il path annidato. credo comunque che lo slash vada messo nella costruzione del percorso

 :bye:

credo di aver risolto...era esattamente quello che dicevi tu:

function read_dir ( $path )
{                      
   $handle = opendir( $path ) ;
   
   while ( $file = readdir( $handle ) )
        {              
           if ( $file != "."  && $file != ".." && $file != NULL && $file != 'NULL' && $file != "CVS")
             {
                echo filetype($path . $file."/")." ==> ".$file."<br>";
                if ( is_dir( $path . $file."/" ) )
                  {
                    read_dir( $path . $file."/" ) ;
                  }
             }
       }
}


read_dir($path);

posto il codice, magari serve a qualcuno.

Questo codice non è mio, l'ho trovato su internet e ho fatto bellamente copia/incolla...

E' una semplice funzione ricursiva, mancava solo  lo slash finale alla versione che ho postato prima.

ciao

Lore

risposto 9 anni fa
Lore
Lore
1
X 0 X

Ho beccata al volo questa funzione, sbaglierò ma fa esattamente la stessa cosa [PHP5]

if(!function_exists('scandir')) {
    function scandir($dir, $sortorder = 0) {
        if(is_dir($dir) && $dirlist = @opendir($dir)) {
            while(($file = readdir($dirlist)) !== false) {
                if(is_dir($file)) $files[] = $file;
            }
            closedir($dirlist);
            ($sortorder == 0) ? asort($files) : rsort($files); // arsort was replaced with rsort
            return $files;
        } else return false;
    }
}
risposto 9 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda