Récupérer la liste des répertoires dans un tableau à partir d'une fonction récursive.
Les fonctions récursives, c'est bien joli, mais quand on veut récupérer des valeurs (il faut alors passer par un RETURN), ce n'est plus évident.
A partir du script de http://www.ac-creteil.fr/util/progra...epertoires.php
voici une adaptation qui permet de récupérer la liste des répertoires et sous-répertoires sous forme de tableau.
Le grand avantage est de pouvoir utiliser ce tableau dans des listes déroulantes ...
(une astuce INDISPENSABLE est d'utiliser des variables GLOBALES pour $liste_rep et pour $i )
<?php
// ----------------------------------------------------------------------------------------------------------------------------------------------------------------
// lecture des REPERTOIRES en PROFONDEUR (à partir de "$rep") et COMPTAGE du nombre de fichiers (avec fonction récursive)
// ----------------------------------------------------------------------------------------------------------------------------------------------------------------
// http://www.ac-creteil.fr/util/progra...epertoires.php
/* script rep1.php
* affichage récursif du contenu d'un répertoire, avec parcours en "profondeur d'abord"
* pour cela dès que l'on a atteint et reconnu un sous-répertoire, on le parcours
* prioritairement en appelant récursivement la fonction de parcours pour ce répertoire.
*/
function parcours_rep($rep, $ssrep, $racine, $i) // fonction récursive ("racine" est là pour retrancher cette racine au chemin complet afin de remplir le tableau)
{
if (is_dir($rep)) // Ouvre le dossier "racine" ("/photos_web/galeries/" par exemple) et lit tous les répertoires
{
if( $dir = opendir($rep) ) // Ouvre le dossier "racine" et lit tous les répertoires
{
while( ($fichier = readdir($dir)) !== false )
{
if ($fichier != "." && $fichier != ".." )
{
$chemin = $rep.$fichier;
if (is_dir($chemin)) // Est-ce que $chemin est un répertoire ?
{
global $liste_rep;
global $i;
$liste_rep[$i] = substr($chemin, strlen($racine)); // PLace les fichiers dans un tableau ($liste_rep[] = à la fin)
echo 'i = '.$i.' - ';
echo 'liste_rep = '.$liste_rep[$i].'<br/>';
// echo 'chemin = '.$chemin."<br>";
$i++;
parcours_rep($chemin.'/', ($ssrep==''?$fichier:$ssrep.'/'.$fichier) , $racine , $i); // fonction récursive
}
/* else // si on veut afficher les fichiers du répertoire (ou sous répertoire)
{
$liste_galeries[$i] = substr($chemin, strlen($racine)); // PLace les fichiers dans un tableau
echo 'galerie '.$i. ' = ' . $liste_galeries[$i].'<br/>';
}
*/ }
}
}
} // -------------------------------------- fin de la lecture des répertoires -------------------------------------------------------------------
else
{
echo "le répertoire \"$rep\" n'existe pas ...";
}
closeDir($dir);
return $liste_rep;
} // ---------------------------------------------------------------- fin de la fonction -------------------------------------------------------------------
$liste_repertoires = array();
$liste_galeries = array();
$i=0; // $i = tous les répertoires
$nb_rep=0;
echo "Affichage d'un rép. avec parcours en PROFONDEUR d'abord <br/>";
//$repertoire= '../../photos_web/galeries/'; // "$repertoire" défini dans le programme d'appel
$liste_repertoires = parcours_rep($racine, '', $racine, $i=0);
$nb_galeries = (count($liste_galeries));
$nb_rep = (count($liste_repertoires));
echo 'nb_rep = '.$nb_rep.'<br/>';
// Classement des répertoires ( "sort" = tri croissant "rsort" = tri décroissant)
sort($liste_galeries); // ou rsort($liste_galeries);
sort($liste_repertoires); // ou rsort($liste_repertoires);
for ($i=0; $i<$nb_rep; $i++)
{
if ($liste_repertoires[$i] != '')
{
echo 'liste_rep '.$i.' = '.$liste_repertoires[$i].'<br/>';
}
}
// ============================================================================================================================
?>
Merci à tous les développeurs.