IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

fonction récursive sur arborescence


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 35
    Par défaut fonction récursive sur arborescence
    bonjour
    voici une fonction qui affiche une arborescence, mais je souhaiterais qu'elle affiche aussi les sous-répertoires, et il faudrait donc qu'il y ai de la récursivité sur cette fonction, malheureusement je ne connais pas bien la programmation pour le changer
    merci d'un coup de main si cela n'est pas compliqué ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <div id="arborescence">
     
    				<ul>
    					<li class="racine"><a href="index.php"><img alt="racine" src="themes/original/images/repertoire.png" />racine</a></li>
    					<?php foreach(getDir(BASE) as $element) { ?>
    						<li>
    							<a href="index.php?p=<?php echo rawurlencode(BASE . "/" . $element['nom']) ?>">
    								<img alt="repertoire" src="themes/original/images/repertoire.png" />
    								<span <?php echo rawurlencode(BASE . "/" . $element['nom']) == rawurlencode($repertoire_courant) ? 'style="font-weight:bold"' : '' ?> title="<?php echo normalizeString($element['nom']) ?>"><?php echo shortenString(normalizeString($element['nom']), 18) ?></span>	
    							</a>							
    						</li>						
    					<?php } ?>
    				</ul>
     
    			</div><!-- fin arborescence -->
    LJ

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 35
    Par défaut
    je crois avoir un peu progresser
    j'arrive à lire le sous répertoire, mais se dernier se répète dans les autres répertoires ... au lieu de lire les tiens ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <div id="arborescence">
     
    				<ul>
    					<li class="racine"><a href="index.php"><img alt="racine" src="themes/original/images/repertoire.png" />racine</a></li>
    					<?php foreach(getDir(BASE) as $element) { ?>
    						<li>
    							<a href="index.php?p=<?php echo rawurlencode(BASE . "/" . $element['nom']) ?>">
    								<img alt="repertoire" src="themes/original/images/repertoire.png" />
    								<span <?php echo rawurlencode(BASE . "/" . $element['nom']) == rawurlencode($repertoire_courant) ? 'style="font-weight:bold"' : '' ?> title="<?php echo normalizeString($element['nom']) ?>"><?php echo shortenString(normalizeString($element['nom']), 18) ?></span>	
    							</a>
    								<ul>
    									<?php 
    										$contenu_repertoire = listDir($repertoire_courant);										
    										if( isset($contenu_repertoire) && !empty($contenu_repertoire) ){ ?>
     
    									<?php foreach($contenu_repertoire as $element) { ?>							
    									<tr>					
    										<?php switch($element['type']) {										
    											case 'repertoire': ?>
    												<a href="index.php?p=<?php echo rawurlencode(BASE . "/" . $element['nom']) ?>">
    													<img alt="repertoire" src="themes/original/images/repertoire.png" />
    													<span <?php echo rawurlencode(BASE . "/" . $element['nom']) == rawurlencode($repertoire_courant) ? 'style="font-weight:bold"' : '' ?> title="<?php echo normalizeString($element['nom']) ?>"><?php echo shortenString(normalizeString($element['nom']), 18) ?></span>	
    												</a>
    												<?php break; ?>
    											<?php } ?>
    											<?php } ?>
    										<?php } ?>
    									</tr>
    								</ul>
    						</li>						
    					<?php } ?>
    				</ul>
     
    			</div><!-- fin arborescence -->
    résultat en image
    Nom : Capture.GIF
Affichages : 1115
Taille : 48,8 Ko

  3. #3
    Membre très actif
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Par défaut
    Bonjour,

    pour scanner le contenu de vos répertoires de manière récursive il faut passer par une fonction, de cette manière vous pourrez aller à n'importe quel niveau de profondeur tant que votre machine le supporte

    Voici la fonction pour obtenir un tableau complet contenant les dossiers/fichiers sur plusieurs niveaux.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function rscandir($dir) { 
     
      $result = array();
     
      $cdir = array_diff(scandir($dir), array('..', '.'));
     
      foreach($cdir as $key => $value) {
     
        if(is_dir($dir.DIRECTORY_SEPARATOR.$value)) {
          $result[$value] = rscandir($dir.DIRECTORY_SEPARATOR.$value);
        } else { 
          $result[] = $value; 
        }
      } 
     
      return $result; 
    }

    Pour visualiser le résultat dans le dossier courant vous pouvez utiliser ce code, ça vous donnera une idée du format des données
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo '<pre>';
    var_dump(rscandir(__DIR__));

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 35
    Par défaut
    merci cela ramène bien les nom e fichier et dossiers
    mais je en souhaite que les nom de dossiers et sous dossier d'un répertoire spécifique
    aussi comment j'intègre cela dans mon script ,
    merci LJ

  5. #5
    Membre très actif
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Par défaut
    Il suffit de changer __DIR__ par le path vers votre répertoire à scanner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo '<pre>';
    var_dump(rscandir('/path/vers/le/repertoire/'));

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Php dispose déjà de tout l'arsenal nécessaire pour toutes les opérations de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $dir = new RecursiveDirectoryIterator($pathDir, RecursiveDirectoryIterator::CURRENT_AS_SELF);
    $iterator = new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::CHILD_FIRST);
     
    foreach ($iterator as $item) {
        $filePath = $item->getPathname();
        // faire des trucs...
    }

Discussions similaires

  1. Fonction récursive sur fichiers table
    Par castorameur dans le forum SAGE
    Réponses: 2
    Dernier message: 05/05/2015, 08h52
  2. Fonction récursive sur le parcours d'une arborescence
    Par MINNIEandMICKEY dans le forum Général Java
    Réponses: 4
    Dernier message: 24/12/2014, 10h34
  3. [XSLT 1.0] Fonction récursive sur position
    Par r0shv dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 23/10/2013, 12h10
  4. Fonction récursives sur tableaux indeterminés
    Par Zangdaarr dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 10/01/2011, 10h06
  5. fonction récursive sur string
    Par Jasmine80 dans le forum Langage
    Réponses: 18
    Dernier message: 15/07/2008, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo