Lister tous les sous-repertoires

Lister tous les sous-repertoires - PHP - Programmation

Marsh Posté le 16-03-2006 à 19:07:48    

Salut,
quelqu'un peut-il m'indiquer le code d'une fonction qui prend en parametre un nom de repertoire et qui me remplit un tableau de chaine de caratère correspondant au noms complet (pas relatif) de TOUS les sous-repertoires (et sous-sous-repertoire,...) du nom de repertoire absolu? car je ne vois pas comment dire à ma boucle, tant qu'il y a des repertoires,...
 
Merci beaucoup ;)

Reply

Marsh Posté le 16-03-2006 à 19:07:48   

Reply

Marsh Posté le 16-03-2006 à 19:43:44    

i'n'i a écrit :

Salut,
quelqu'un peut-il m'indiquer le code d'une fonction qui prend en parametre un nom de repertoire et qui me remplit un tableau de chaine de caratère correspondant au noms complet (pas relatif) de TOUS les sous-repertoires (et sous-sous-repertoire,...) du nom de repertoire absolu? car je ne vois pas comment dire à ma boucle, tant qu'il y a des repertoires,...
 
Merci beaucoup ;)


 
Voici une chtite fonction qui devrait t'aider... a toi eventuellement de la modifier pour avoir des chemins relatifs ou absolus.
Sinon le principe pour exprimer le fameux "tant qu'il y a des repertoires" c'est d'utiliser la recursion (la fonction s'appelle elle-meme).
 

Code :
  1. <?
  2. function find_dirs($dir) {
  3.    $dir_list = array();
  4.    if($objs = glob($dir."/*" )){
  5.        foreach($objs as $obj) {
  6.            if(is_dir($obj)) {
  7.                $dir_list[] = $obj;             
  8.                $dir_list = array_merge($dir_list, find_dirs($obj));                                     
  9.            }
  10.        }
  11.    }
  12.    return $dir_list;
  13. }
  14. $dir = find_dirs('nom_du_repertoire');
  15. print_r($dir);
  16. ?>


Message édité par Woutcha le 16-03-2006 à 19:44:35
Reply

Marsh Posté le 16-03-2006 à 20:48:32    

Merci bien, je vais tester ça !

Reply

Marsh Posté le 16-03-2006 à 21:16:45    

ok, la fonction marche bien mais 2 petits soucis :
 
1) Les repertoires sont de la forme /repertoireParent//ssrep1   /repertoireParent//ssrep2   /repertoireParent//ssrep3
Il y a 2 slash entre le repertoire parent et les sous-repertoires!
Que faut-il modifier dans la fonction?
 
2) print_r($dir) m'affiche mes repertoires comme ceci : [0] => rep0 [1] => rep1 [2] => rep2
Comment fait-on pour n'avoir une liste que des repertoires, pour y travailler dessus après? Dans une boucle par exemple
foreach( ??? )
 {
echo $rep
}
 
Merci.

Reply

Marsh Posté le 16-03-2006 à 21:21:23    

oups! Le probleme du double slash est réglé : c'est que je rentrait mon repertoire parent avec un slash à la fin dans mon formulaire.
 
Il reste donc cette question :  
print_r($dir) m'affiche mes repertoires comme ceci : [0] => rep0 [1] => rep1 [2] => rep2  
comment fait-on pour n'avoir une liste que des repertoires, pour y travailler dessus après? Dans une boucle par exemple  
foreach( ??? )  
 {  
echo $rep  
}  
 
Merci ;)

Reply

Marsh Posté le 16-03-2006 à 21:40:28    

i'n'i a écrit :

oups! Le probleme du double slash est réglé : c'est que je rentrait mon repertoire parent avec un slash à la fin dans mon formulaire.
 
Il reste donc cette question :  
print_r($dir) m'affiche mes repertoires comme ceci : [0] => rep0 [1] => rep1 [2] => rep2  
comment fait-on pour n'avoir une liste que des repertoires, pour y travailler dessus après? Dans une boucle par exemple  
foreach( ??? )  
 {  
echo $rep  
}  
 
Merci ;)


 
En fait print_r est juste la pour l'exemple. (c'est une fonction pour afficher tres sommairement n'import quel "objet" php).
 
Le tableau qui contient tes repertoires est le tableau retourne par la fonction. ($dir dans l'exemple).
 
Pour parcourir ton tableau tu n'as qu'a faire une simple boucle (foreach($dir as $key => $value){ print $value;})
N'hesite pas a consulter la doc php concernant les tableaux...

Reply

Marsh Posté le 16-03-2006 à 21:50:42    

Nickel merci, c'est ce que je voulais :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed