Page 1 sur 1

remplir un array avec les résultats d'une boulce while

Posté : 28 avr. 2011, 16:36
par easyjava
Bonjour,
J'ai un script qui me permet d'afficher l'arborescence de mon site (sauf le dossier phpMyAdmin). Pour le moment j'arrive à en sortir une jolie liste mais il faudrait que je puisse stocker les résultats dans un array tout simple sous cette forme :

Code : Tout sélectionner

$files = array('fichier1.php', 'fichier2.php', 'fichier3.php');
Voici le code qui génère la liste :
<?php
function mkmap($dir){
    $folder = opendir ($dir);
   
    while ($file = readdir ($folder)) {   
        if ($file != "." && $file != "..") {           
            $pathfile = $dir.'/'.$file;
			
			echo $pathfile.'<br>'; 
			
            if(filetype($pathfile) == 'dir' && $pathfile != './phpMyAdmin'){
                mkmap($pathfile);               
            }
        }       
    }
    closedir ($folder);    
}
mkmap('.');
?>
J'ai bien essayé de remplacer le
echo $pathfile.'<br>';
par
$files[] = $pathfile;
mais malheureusement cela n'a pas fonctionné.
Est ce que quelqu'un a la solution ?

Je vous remercie d'avance

Re: remplir un array avec les résultats d'une boulce while

Posté : 28 avr. 2011, 16:42
par Mazarini
bonjour,

fais en début de script :
global files;

Si la variable n'est pas global, elle est supprimée en fin de fonction.

Re: remplir un array avec les résultats d'une boulce while

Posté : 28 avr. 2011, 16:51
par easyjava
Merci pour ta réponse.
J'ai bien essayé comme tu m'as indiqué mais malheureusement quand j'affiche le contenu de mon tableau il est toujours vide !
<?php
global $files;
$files = array();
function mkmap($dir){
    $folder = opendir ($dir);
   
    while ($file = readdir ($folder)) {   
        if ($file != "." && $file != "..") {           
            $pathfile = $dir.'/'.$file;
			
			$files[] = $pathfile; 
			
            if(filetype($pathfile) == 'dir' && $pathfile != './phpMyAdmin'){
                mkmap($pathfile);               
            }
        }       
    }
    closedir ($folder);    
}
mkmap('.');

foreach($files as $result){
  echo $result.'<br>';
}
?>

Re: remplir un array avec les résultats d'une boulce while

Posté : 28 avr. 2011, 17:24
par macgawel
RTFM :evil:
lorsque vous définissez une fonction, la portée d'une variable définie dans cette fonction est locale à la fonction.
En clair :
Dans ta fonction mkmap(), tu utilises une variable $files locale, différente de la variable $files définie au début de ton script.
A la fin de la fonction elle "disparaît", $files reprend la valeur donnée au début de ton script, soit un tableau vide.

C'est au niveau de ta fonction qu'il faut déclarer $files comme une variable globale (c'est à dire que la fonction utilisera la même variable que le script l'appellant).
function mkmap($dir){
global $files; // On signale à la fonction d'utiliser la variable définie dans le script
// reste du code
}
Ceci-dit, il vaut mieux éviter d'utiliser les variables globales quand on peut (pour éviter de se mélanger les pinceaux et d'écraser une variable qu'on souhaitait garder).
Dans ton cas, j'aurais plutôt tendance à faire une fonction qui retourne un tableau.
function mkmap($dir){
    $folder = opendir ($dir);
    while ($file = readdir ($folder)) {  
        if ($file != "." && $file != "..") {          
            $pathfile = $dir.'/'.$file;
                        $fichiers[] = $pathfile;
            if(filetype($pathfile) == 'dir' && $pathfile != './phpMyAdmin'){
                mkmap($pathfile);              
            }
        }      
    }
    closedir ($folder); 
    return $fichiers;
}
$files = mkmap('.');
Et au passage, si tu utilises PHP5 tu devrais te pencher sur la fonction scandir()...

Re: remplir un array avec les résultats d'une boulce while

Posté : 28 avr. 2011, 18:01
par easyjava
Merci pour la précision. Tout fonctionne.