sanddy Posté 24 Novembre 2008 Posté 24 Novembre 2008 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 : $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.
captain_torche Posté 24 Novembre 2008 Posté 24 Novembre 2008 Ton souci vient du fait qu'à cause de l'underscore, et bien qu'il n'y ait que des chiffres, ton classement se fait par ordre alphabétique. Pour corriger ce souci, il faudrait ajouter une étape : utiliser le numéro de la photo comme clé d'un array temporaire, puis trier ce dernier. Ca pourrait donner quelque chose comme ça : <?php$tab_photos = array('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');$tab_photos_2 = array();$reg = '#([0-9]+)_([0-9]+)\.jpg#';foreach($tab_photos as $value) { preg_match($reg, $value, $matches); $tab_photos_2[$matches[2]] = $value;}ksort($tab_photos_2);?>
Dadou Posté 24 Novembre 2008 Posté 24 Novembre 2008 ou tout simplement insérer les zéros non significatif : 008_001.jpg 008_002.jpg 008_003.jpg 008_004.jpg 008_005.jpg 008_006.jpg 008_007.jpg 008_008.jpg 008_009.jpg 008_010.jpg 008_011.jpg 008_012.jpg j'ai mis deux zéros non significatifs car je ne sais pas combien tu en as, et je fais de même pour la première partie, sinon tu te retrouveras avec le même problème
sanddy Posté 25 Novembre 2008 Auteur Posté 25 Novembre 2008 Super !!! Merci, ça fonctionne ainsi $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[$nbpht] = $faire; //$tab.= ", ".$nbpht; //rsort($tab);}if (is_array($tab)) { ksort($tab); foreach ($tab as $value) { echo $value; //$qqq .= "photo=\"".$id."_".$value.".jpg\" OR "; }} Bonne journée !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant