Trier un tableau multidimentionnel php

Résolu/Fermé
kergad - 22 août 2010 à 01:10
Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 - 23 août 2010 à 15:24
Bonjour à tous,

je suis en train de faire une fonction pour pouvoir lister des dossiers avec des images.
En utilisant la fonction dir, je genère un tableau contenant mon aboressence.
Mais le probleme est que la fonction dir me donne un resultat désordonné.

Comment puis je classer mon tableau de maniere alphabetique.

Concretement j'aimerais tier la premiere dimention de mon tableau (soit les dossiers sources). J'ai déjà essayé avec la fonction array_multisort mais je n'arrive pas à bien l'utiliser.

mon tableau ressemble à ça :
    [Mind range pricehouse] => Array
        (
            [part 2] => Array
                (
                    [0] => thumbnails
                    [1] => images
                    [2] => albumThumbnail.jpg
                )
 
            [Living room] => Array
                (
                    [0] => thumbnails
                    [1] => images
                    [2] => albumThumbnail.jpg
                )
 
        )
 
    [Residential mixed projects] => Array
        (
            [Part 1] => Array
                (
                    [0] => thumbnails
                    [1] => images
                    [2] => albumThumbnail.jpg
                )
 
            [Part 2] => Array
                (
                    [0] => thumbnails
                    [1] => images
                    [2] => albumThumbnail.jpg
                )
 
        )


Merci de votre aide
A voir également:

3 réponses

Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
22 août 2010 à 14:11
Salut !

Je ne comprend pas le traitement en PHP, je vais donc t'expliquer comment je fais pour une arborescence :

J'ouvre le dossier (opendir); Je liste dans un tableau les dossiers. Je recommence avec les fichiers. Je trie ces deux-la avec sort() ( $ tableau = sort($tableau);

Et avec foreach(), je liste chaque dossier. Je les trie ( foreach, et dans chaque boucle, sort() );

Si tu pouvais expliquer ton but précis, ou bien nous passer le code PHP, ce serait plus pratique.

Merci.
0
Mon but et d'afficher le contenu de mes dossiers avec leur sous dossiers
exemple (nouvel album -> part1 -> mes photos)

Voici le code de ma fonction:
function dirlist($position)
	{
	$dir_nom = $position; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
	$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
	$fichier= array(); // on déclare le tableau contenant le nom des fichiers
	$dossier= array(); // on déclare le tableau contenant le nom des dossiers
	$tab= array(); // on déclare le tableau contenant le nom des dossiers

	//echo "$dir_nom <p> +1";

	while($element1 = readdir($dir)) {
		if($element1 != '.' && $element1 != '..' && $element1 != 'Thumbs.db') {
			//echo $element1."+2\n";
			$tab[$element1] = array();
			$dir2= dir("$dir_nom/$element1");
			while (($element2 = $dir2->read()) !== false) {
				if($element2 != '.' && $element2 != '..' && $element2 != 'Thumbs.db') 
					{
					//echo $element2."+3\n";
					$tab[$element1][$element2]=array();
					$dir3= dir("$dir_nom/$element1/$element2");
					while (($file = $dir3->read()) !== false) {
						if($file != '.' && $file != '..' && $file != 'Thumbs.db') 
							{
							//echo $file."+4\n";
							$tab[$element1][$element2][]=$file;
							}
						}
					$dir3->close();
					}
				}
			$dir2->close();
		}
	}
	closedir($dir);
	 
	//print_r($tab);
	
	//usort($tab[], "strcasecmp");
	//array_multisort($tab, SORT_ASC, SORT_STRING};
	//var_dump($tab);
	
	return $tab;
	}


Merci
0
Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
23 août 2010 à 15:24
Salut !

Voici un code qui écrit une arborescence complète, et par ordre alphabétique.
Les balises <ul> et <li> sont en HTML des listes à puce.
Par défaut, ce code fait une arborescence du dossier actuel, c'est-à-dire celui ou le script s'éxécute. Tu peux le modifier à la ligne parcours("").

Bye ;)

Code :
<?php
function parcours($location){
global $files, $dirs;
$tab = array();
echo "<ul>";
$chemin = $location;
if($chemin == ""){
$chemin = ".";
}
$dossier = opendir($chemin);
for($i=0; $f = readdir($dossier); $i++){
if($f == "." || $f == "..") continue;
$tab[$i] = $f;
}
closedir($dossier);
sort($tab);
foreach($tab as $nom){
echo "<li>".$nom."</li>";
if(is_dir($location.$nom)){
$dirs++;
parcours($location.$nom."/");
}
else{
$files++;
}
}
echo "</ul>";
}
parcours("");
?>
<center><?php echo $files; ?> fichiers et <?php echo $dirs; ?> dossiers au total.</center>
0