Page 1 sur 1

programmation récursive en php

Posté : 09 févr. 2007, 17:36
par Laur
Bonjour, ci-joint un exemple de programmation récursive:
////////////////////////////////////////////////////////////////
//programmation récursive en php:
//enregistrement de l'aborescence des dossiers à partir de la directory 'www'
//dans un tableau:
//  appel de la fonction EnumFolders() qui retourne un tableau décrivant les 'path' des dossiers
//  appel de la fonction AffichFolders qui affiche le tableau  des dossiers
//note: l'enregistrement de l'arborescence permet de tracer un graphe, de déterminer  le 'path'
//      pour atteindre un dossier à partir d'un autre dossier.
///////////////////////////////////////////////////////////////
function AffichFolders($ArrayFolders,$Pos = 0)
{
   for ($Space = '', $i = 1; $Pos > 0 && $i <= $Pos; $i++)
         $Space .= "&nbsp;";
   foreach ($ArrayFolders as $Key=>$Value)
   {  $Head = '['.$Key.'] = ';
      if (is_array($Value) && !empty($Value))
      {  if (is_array($Value[0]))
            AffichFolders($Value[0],strlen($Head) + $Pos);
         else
            echo $Space.$Head.$Value[0].'<br>';
         AffichFolders($Value[1],strlen($Head) + $Pos);
      }
      else
         echo $Space.$Head.$Value.'<br>';
   }
}

////////////////////////////////////////////////////////////////////////////////
function EnumFolders($Node)
{  $ArrayFolders = array();
   $Count        = 0;
   if ($Dir = opendir($Node)) //open Ditectory
   {  while($File = readdir($Dir))  //open Directory
      {  $Nodebase = basename($File);
         if ($Nodebase=="." || $Nodebase=="..")
            continue;
         // La fonction is_dir() renvoit toujours faux si le handle acquit avec opendir()
         // n'est pas à partir du dossier courrant(getcwd) ;
         // l'exception s'applique à « . » et « .. ».
         $NewNode = $Node.'/'.$File;
         if(is_dir($NewNode))
            $ArrayFolders[$Count] = array($File,EnumFolders($NewNode));
         else
            $ArrayFolders[$Count] = $File;
         $Count++;
      }
   }
   closedir($Dir);
   return $ArrayFolders;
}
/////////////////////////////////////////////////////////////////
$DirRoot = dirname($_SERVER['PHP_SELF']);
$Pos     = strpos($DirRoot,'www');
if ($Pos === FALSE)
$Dirwww = ($Pos === FALSE)? '.' : $Dirwww = substr($DirRoot,0,$Pos + 3);
 echo "<br> Directory: '".$Dirwww."'<br>";
       $ArrayFolders = EnumFolders($Dirwww);
       AffichFolders($ArrayFolders);
?>