La Communauté Webmaster  forum rss


  Forum-webmaster
  Technique - programmation
  PHP / MySQL
(Modérateurs: Shain, Jey, erwinol, Lilian, lauryv, ToToMaStEr)
  Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2 3
« Précédent Suivant »
Pages: [1] Descendre
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
  Auteur  Sujet: Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2 3  (Lu 877 fois)
Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2 3
« sur: le 24-11-2008 a 23:03:34 »
sanddy
Membre récent
*

Hors-Ligne

Messages: 22



Je suis un lama!

Voir le Profil
Répondre avec citation

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.

« Dernière Édition: le 24-11-2008 a 23:04:21 par sanddy » Rapporter au modérateur  

Re:Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2
« Répondre #1 sur: le 26-11-2008 a 22:54:57 »
Krash
P'tit nouveau
**

Hors-Ligne

Sexe: Male
Messages: 181





Voir le Profil    E-Mail
Répondre avec citation

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.

Rapporter au modérateur  
Re:Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2
« Répondre #2 sur: le 28-11-2008 a 17:54:18 »
ToToMaStEr
Modérateur Global
*****

Hors-Ligne

Sexe: Male
Messages: 238



....

Voir le Profil    WWW    E-Mail
Répondre avec citation

Tu peux aussi faire une fonction de tri perso.

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

Rapporter au modérateur  

Vous ne pourrez pas me batre à ce jeu:labrute || Formation aux premiers secours CRF
Re:Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2
« Répondre #3 sur: le 03-12-2008 a 09:10:02 »
argentcool.com
Membre récent
*

Hors-Ligne

Messages: 3





Voir le Profil    WWW
Répondre avec citation

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);
}

Rapporter au modérateur  
Re:Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2
« Répondre #4 sur: le 03-12-2008 a 09:39:43 »
Krash
P'tit nouveau
**

Hors-Ligne

Sexe: Male
Messages: 181





Voir le Profil    E-Mail
Répondre avec citation

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.

« Dernière Édition: le 03-12-2008 a 09:42:41 par Krash » Rapporter au modérateur  
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
Pages: [1] Monter
« Précédent Suivant »
Sauter à: 

Votre statut : Invité
Vous devez être membre pour participer.
 
 
Let’s Encrypt : le certificat SSL gratuit
Tester votre site internet sur différents navigateurs
[WordPress] Des problèmes avec l’administration ?
Rappel : Mettez à jour vos CMS et vos sites E-commerce
Le .fr fête ses 25 années d’existence !
Mesurer votre audience en temps réel avec BubbleStat
Porter réclamation contre Google Panda ?
Zlio n’est plus …
 
 
 
 
 

Copyright (c) Devclic 2002 - 2026 - Tous droits réservés

creation site internet strasbourg