Aller au contenu

Fonction sort qui me sort un tri mais pas comme je le souhaite : 1 10 11 12 2 3 4 5..


Sujets conseillés

Posté

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.

Posté

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

Posté

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

Posté

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 ! :D

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...