[php] amélioration d'une focntion de listage de dossier

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Thomas
Varan
Messages : 1907
Inscription : 07 janv. 2004, 17:29

[php] amélioration d'une focntion de listage de dossier

Message par Thomas »

Bonjour

Voilà la fonction :

Code : Tout sélectionner

$array2 = array();
function dirtree($dir) {
    global $array2;
		// Lecture du repertoire
		$rep = opendir($dir);

		while($file = readdir($rep)) {
			// $addr
			$addr = ($dir == '.') ? $file : $dir.'/'.$file;
			
			// Si c'est un dossier on l'ouvre
			if(is_dir($addr) && $file != '.' && $file != '..') {
				$array2[$addr] = $addr;
					
					// Lecture du dossier en question
					dirtree($addr);

			}
			// Si c'est un fichier
			if(is_file($addr)) {
				$array2[] = $addr;
			} 
		}
        closedir($rep);
}
dirtree('.');
sort($array2);
Elle liste le dossier qu'on lui spécifie ainsi que les sous-dossiers et etc.

Le problème c'ets que le tableau retourné ne me plaît pas. Il est peu maniable.
Je ne sais pas quelle serait la meilleure solution mais j'aimerai au moins que chaque sous-dossier soit dans un tableau avec les fichiers avec.

Genre :

Code : Tout sélectionner

Array
(
    [0] => fichier1.php
    [1] => fichier2.php
    [nom_du_dossier] => Array
                                     (
                                         [0] => fichier.php
                                     )
...
)
Comment faire ?

Merci[/code]
Anciennement Toto.
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message par chBok »

C'est toujours un exercice intéressante, et fort classique. :D Tu utilises une fonction récursive, très bien. Toutefois, tu l'utilises mal, car elle ne retourne aucune valeur (tableau dans ce cas).

Tu devrais avoir un $tableau[$dir] = dirtree($dir) pour obtenir le formattage que tu souhaites avec les répertoires et $tableau[] = $fichier pour tes fichiers, et donc pour finir un return $tableau;.

Dans ce cas, il faudra que tu fasses le tri (sort()) autrement.

:idea: Perso, je crée un tableau avec des clefs 'fichier' et 'repertoire', plutôt qu'une numérotation ordonnée, mais c'est selon l'usage que tu en fait ensuite.
Thomas
Varan
Messages : 1907
Inscription : 07 janv. 2004, 17:29

Message par Thomas »

En fait le code originel n'est pas de moi. Je vais tenter de le modifier.

Les clés ne peuvent pas être redondante il me semble. Comment tu fais pour "créer un tableau avec des clefs 'fichier' et 'repertoire'" ?
Anciennement Toto.
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Tu peux garder le principe d'un tableau indexé numériquement, et utiliser is_array() au moment de l'affichage pour savoir ce que tu as sous la main.

Je ne suis pas sûr, ça il faut vérifier, mais le tri devrait te regrouper les répertoires à la fin de toute façon.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
Thomas
Varan
Messages : 1907
Inscription : 07 janv. 2004, 17:29

Message par Thomas »

Je n'ai plus besoin de cette fonction donc je n'y ai pas retravaillé.

J'ai trouvé ça sinon : http://www.nexen.net/scripts/details.php?scripts=370
Anciennement Toto.
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités