Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: sanddy le le 24-11-2008 a 23:03:34

Titre: Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2 3
Posté par: sanddy le le 24-11-2008 a 23:03:34

Bonjour,

J'ai un gros problème...

J'ai passé toute la journée dessus, je pense arriver vers la fin mais j'ai besoin de vous.

Je vous explique le problème :

Nous avons dans une table "photos" un champ "photo" en varchar qu'on ne peut pas changer... car le site a toujours fonctionné avec et plusieurs applications utilisent ce champ.

J'essaie de classer ces photos mais ce que je fais me classe toujours mal les chiffres.

Il est de la forme :
photoid_numero.jpg

Un exemple :

Je fais un ORDER BY monchamp ASC, cela m'affiche :

8_1.jpg
8_10.jpg
8_11.jpg
8_12.jpg
8_2.jpg
8_3.jpg
8_4.jpg
8_5.jpg
8_6.jpg
8_7.jpg
8_8.jpg
8_9.jpg

Il me met toujours le 10, 11, 12... entre le 1 et le 2 !!

Au lieu de :

8_1.jpg
8_2.jpg
8_3.jpg
8_4.jpg
8_5.jpg
8_6.jpg
8_7.jpg
8_8.jpg
8_9.jpg
8_10.jpg
8_11.jpg
8_12.jpg

Savez-vous comment faire SVP ???

J'avais pensé à un tableau mais en faisant la fonction sort, cela me sort toujours dans le même ordre...

Je vous donne mon code :


Code:
$query = "SELECT * FROM photos WHERE idphoto='$id' ORDER BY idd DESC";
$query2 = mysql_query($query) or die(mysql_error());

$tab = array();

while ($a=mysql_fetch_assoc($query2)) {

   $possep=strpos($a['photo'],"_");

   $pospt=strpos($a['photo'],".");

   $lngnum=$pospt-$possep-1;

   $nbpht=substr($a['photo'],$possep+1,$lngnum);
   
   $faire = $nbpht.", ";
   $tab[] = $faire;
   
   //$tab.= ", ".$nbpht;
   //rsort($tab);
   
   
   
}

if (is_array($tab)) {
   sort($tab);
   foreach ($tab as $value) {
      echo $value;
         }
}



Pouvez-vous m'aider SVP ???

Pas facile de se faire comprendre, j'espère que vous aurez compris ;)

Merci d'avance.

Titre: Re:Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2
Posté par: Krash le le 26-11-2008 a 22:54:57

Bonsoir

le plus simple et rapide serait de renommer les images de 8_1.jpg à 8_9.jpg en 8_01.jpg, 8_02.jpg, .......... 8_09.jpg

de cette façon le trie se fera sur les 2 chiffres.

Si tu comptes avoir plus de 100 images, tu peux mettre 8_001.jpg et donc ensuite 8_010.jpg etc.

Titre: Re:Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2
Posté par: ToToMaStEr le le 28-11-2008 a 17:54:18

Tu peux aussi faire une fonction de tri perso.

Renseigne toi sur les tri à bulles à pivot....

Titre: Re:Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2
Posté par: argentcool.com le le 03-12-2008 a 09:10:02

Bonjour

Je ne sais pas combien tu as de photos au total, mais une solution simple serait de tester la longueur du nom de fichier, 8_1.jpg = 7 caractères.

if (strlen($filename)==7) {
$filename= substr($filename,0,2) . "0" . substr($filename,2);
}

Titre: Re:Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2
Posté par: Krash le le 03-12-2008 a 09:39:43

En fait il y a beaucoup plus simple que tout ca
Tu récupères toutes tes images que tu met dans un tableau et avec une fonction de trie c'est fait automatiquement.
La fonction sort() triera de la même manière que ce que tu as en ce moment.
Par contre la fonction natsort() triera comme tu le souhaites.
Citation:
$images = array("8_1.jpg", "8_7.jpg", "8_10.jpg", "8_11.jpg", "8_2.jpg", "8_3.jpg", "8_5.jpg", "8_4.jpg", "8_12.jpg", "8_6.jpg", "8_8.jpg", "8_9.jpg");
natsort($images);
foreach($images as $img) {
   echo $img . "<br/>";
}


Ce qui de donnera bien
Citation:
8_1.jpg
8_2.jpg
8_3.jpg
8_4.jpg
8_5.jpg
8_6.jpg
8_7.jpg
8_8.jpg
8_9.jpg
8_10.jpg
8_11.jpg
8_12.jpg


Et si tu as des majuscules dans les noms d'images, utilises la fonction natcasesort() qui est insensible à la casse.


Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.