Page 1 sur 1

trier nombres par ordre croissant

Posté : 05 juin 2007, 10:28
par celerite34
bonjour ami(e)s codeurs et codeuses! :D

J'ai un souci, je suis comment dire, débutante en php et j'aimerais savoir comment je pourrais faire un tri numérique par ordre croissant. Je m'explique, voilà mon code:
// url du fichier qui contient les images 
$urlphoto = "http://localhost/web/html/upload/mesImages"; 

// nom du répertoire qui contient les images 
$nomRepertoire = "/var/www/web/html/upload/mesImages"; 
if (is_dir($nomRepertoire))
   {

   $dossier = opendir($nomRepertoire);
   $nbr=0;

//On va fabriquer un formulaire
	echo "<form id='formImages' name='formImages' action='#'>";

   while ($Fichier = readdir($dossier)) 
       { 

	if(is_file($nomRepertoire.'/'.$Fichier))

	$nbr++;
	
      	if ($Fichier != "." AND $Fichier != ".." AND stristr($Fichier,'.jpg')) 
        { 
	
        // Hauteur de toutes les images 
        $h_vign = "120"; 
        $taille = getimagesize($nomRepertoire."/".$Fichier); 
        $reduc  = floor(($h_vign*100)/($taille[1])); 
        $l_vign = floor(($taille[0]*$reduc)/100); 
      
          echo '<a target="_blank" href="', $urlphoto, '/',$Fichier, '">';
          echo '<img src="', $urlphoto, '/',$Fichier, '" '; 
          echo "width='$l_vign' height='$h_vign'>"; 
          echo "</a>&nbsp;"; 
	  echo "<input type='checkbox' name='$Fichier' id='$Fichier' /><label for='$Fichier'>$Fichier</label><br />";
          }
        }    

//On ferme le formulaire
	echo "</form>";
	  echo "<br>Il y a $nbr images<br>";

   closedir($dossier); 
       }
   }else{
   echo "Le répertoire spécifié n\'existe pas";
   }
bon la partie problèmatique est le $Fichier, qui, lorsque je fais un echo me renvoie mes fichiers mais dans le désordre, mes fichiers sont des miniatures. Ca me renvoie genre ça:

zep32.jpg, zep29.jpg, zep33.jpg, zep4.jpg, zep1.jpg, zep34.jpg, zep27.jpg, zep26.jpg, zep36.jpg, zep14.jpg, zep28.jpg, zep17.jpg, zep35.jpg, zep11.jpg, zep12.jpg, zep22.jpg, zep7.jpg, zep5.jpg, zep9.jpg, zep15.jpg, zep10.jpg, zep37.jpg, zep16.jpg, zep2.jpg, zep20.jpg, zep18.jpg, zep3.jpg etc etc....

Et bien entendu j'aimerais que mes images soient affichées dans l'ordre croissant....impossible de trouver comment faire.....si quelqu'un peut m'aider, ça serait pas de refus du tout! Ca serait même carrément sympa! :wink:

Par contre mon code peut servir à ceux qui souhaite parcourir un dossier d'images, et les afficher en miniatures! :pouce:

Posté : 05 juin 2007, 10:38
par titerm
Au lieu d'afficher directement tes liens, tu scan ton rep et tu met la liste des fichiers dans un tableau.

Tu tri ce tableau (asort voir peut etre natsort dans ton cas) et tu fais un foreach() sur ton tableau ou tu fais les echo de tes liens.

Posté : 05 juin 2007, 10:45
par celerite34
Salut titerm!

Merci de m'avoir répondu! Bon euhhh je vais essayer de voir comment marche tout ça alors....mais mon statut de novice me laisse présager que je vais avoir du mal! lol
Alors si tu peux m'aider d'avantage n'hèsite pas! En attendant je vais voir ce que je peux faire ;)

Posté : 05 juin 2007, 11:17
par titerm
je vais te filer le skelette global en reprenant des morceaux de ton source



// Lecture de la liste des fichiers
// Aucun echo dans cette section
$listFichier = array() ;
if(is_dir() ) {
 opendir();
 while( $f = readdir()  ) {
   if( "c'est un fichier comme tu veux") {
     $listFichier[] = $f;
   }
 }
closedir();
 // Tri du tableau de fichier, regarde les doc de asort() et natsort() pour voir la diff
 natsort($listFichier);

// Affichage du resultat
 echo 'form';
 foreach($listFichier as $fichier) {
   $taille = getimagesize();
  //blablabla
   echo  '<a blablabla >';
   echo '<input blablabla>';
 }
 echo '/form';
 echo 'il y a nb images ' . count($listFichier);
}
else  {
 echo 'rep inexistant';
}




Posté : 05 juin 2007, 12:24
par celerite34
Re titerm!

Juste pour te remercier parce que ça marche niquel now! :D j'ai fait quelques modifications donc je remet mon code pour les futures personnes qui rencontreront mon problème ;)

// Url du fichier qui contient les images 
$urlphoto = "http://localhost/web/html/upload/mesImages"; 

// Nom du répertoire qui contient les images 
$nomRepertoire = "/var/www/web/html/upload/mesImages"; 

// Lecture de la liste des fichiers
// Aucun echo dans cette section
// On défini un tableau
$listFichier = array() ;

if(is_dir($nomRepertoire) ) {
$dossier = opendir($nomRepertoire);

 	while( $fichier = readdir($dossier)  ) {
	
   		if($fichier != "." AND $fichier != ".." AND stristr($fichier,'.jpg')) {
		//on met chaque fichier dans le taleau
     		$listFichier[] = $fichier;
		$nbr= count($listFichier); 
   		}
 	}
closedir($dossier);

// Tri du tableau de fichier, regarder les doc de asort() et natsort() pour voir la diff
natsort($listFichier);

// Affichage du resultat
echo "<form>";
	foreach($listFichier as $fichier) {
	// Hauteur de toutes les images 
        $h_vign = "120"; 
        $taille = getimagesize($nomRepertoire."/".$fichier); 
 	$reduc  = floor(($h_vign*100)/($taille[1])); 
        $l_vign = floor(($taille[0]*$reduc)/100); 

	echo '<a target="_blank" href="', $urlphoto, '/',$fichier, '">';
	echo '<img src="', $urlphoto, '/',$fichier, '" '; 
	echo "width='$l_vign' height='$h_vign'>"; 
	echo "</a>&nbsp;"; 
	echo "<input type='checkbox' name='$fichier' id='$fichier' /><label for='$fichier'>$fichier</label><br />";
 	}

// On ferme le formulaire
echo "</form>";
echo "<br>Il y a $nbr images<br>";
}
else  {
 echo "repertoire inexistant";
}

Posté : 05 juin 2007, 13:27
par titerm
juste pour te dire que le $nbr = count() dans le while, ca le fait pas.
vire le $nbr du while, et met le count directement a la fin, (voir skelette )

Posté : 05 juin 2007, 14:30
par Invité
en fait quand je met le count à la fin, ça marche pas et quand je laisse comme ça, ça le fait, donc bon... :roll:

ça me donne le bon nombre d'images .jpg qui se trouve dans $nomRepertoire.
Pourquoi tu dis que ça le fait pas toi?

Posté : 05 juin 2007, 14:59
par titerm
bah je dis ca le fait pas car tu fais un count de ton tableau a chaque boucle. Totalement inutile.

Il faut compter une seule fois le nombre d'image dans le tableau apres le while.

soit tu fais juste après le while et tu laisse ton echo a la fin comme il est
$nbr = count($listFichier);

Soit tu modifie ton echo et tu ne passe pas par une var intermédiaire.

echo "<br>Il y a " . count($listFichier) . "$nbr images<br>";

C'est plus ou moins pareil et les 2 fonctionnes à coup sur. Si une des 2 methodes ne fonctionne pas, c'es que tu fais une erreur qq part :)

Posté : 05 juin 2007, 15:33
par Invité
En effet les deux marchent :D
Mais je n'arrive pas à comprendre la deuxième possibilité.....
Soit tu modifie ton echo et tu ne passe pas par une var intermédiaire.
echo "<br>Il y a " . count($listFichier) . "$nbr images<br>";
En fait j'ai du mal à comprendre comment $nbr peut contenir le nombre sans dire avant:
$nbr=count($listFichier)
Je suis pas super douée mais j'ai envie d'apprendre et j'aime pas quand je comprend pas! Alors si tu as un petit temps, lol

Posté : 05 juin 2007, 15:38
par titerm
en fait il ne faut pas metre $nbr dans la 2nd solution, c'est une erreur de frappe de ma part...

mea culpa, mea maxima culpa :)

Posté : 05 juin 2007, 15:44
par Invité
lol, pas de souci! ça arrive, même aux meilleurs !! ;)
Je suis surtout contente de voir que ma question n'était pas totalement dénuée de sens!

Merci encore pour ton aide!