par
Truc » 23 oct. 2005, 00:37
ça s'appel la magie de la récursivité
ajoute ces lignes de test (juste avant ton echo "a")pour suivre le déroulement de ton tableau, tu vera que le nombre de données du tableau est hasardeux:
foreach ($liste['listedossier'] as $val)
{
echo "val = ".$val."<br>";
}
echo "<hr>";
Tu as en quelque sorte plusieurs tableau $liste en cours. La fonction suit un chemin dossier dans dossier jusqu'a ce qu'il y ai plus de sous-dossier puis "remonte" dans le chemin pour reparcourir un autre chemin et ecrase les donnée.
de plus tu crée un nouveau tableau a chaque passage dans la fonction enfaissant:
$liste = array("listechemin" => array(), "listedossier" => array());
dans la fonction !! a mettre en dehors de cell-ci ! et donc ajouter un paramètre de fonction.
autre chose: a chaque appel récursif de la fonction tu ne l'affecte pas au résuktat précédent. Il faut donc toujours faire comme ceci:
$liste=liste_recursive($path);
voila la solution:
function liste_recursive($dossier_a_parcourir,$liste)
{
$dir = opendir($dossier_a_parcourir) ;
while( $file = readdir($dir) )
{
if((is_dir($dossier_a_parcourir.'/'.$file)) && $file != '.' && $file != '..')
{
$path = $dossier_a_parcourir.'/'.$file;
$liste['listechemin'][] = $path;
$liste['listedossier'][] = $file;
$liste=liste_recursive($path,$liste);
}
}
return $liste;
}
$racine = './';
$liste = array("listechemin" => array(), "listedossier" => array());
$liste = liste_recursive($racine,$liste);
et tu devrai avoir tous les dossier [-o<
et remercier la récursivité et son utilisation tres simple
