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.
$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
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.
|