MarvinLeRouge Posté 22 Mai 2005 Partager Posté 22 Mai 2005 (modifié) Salut, J'ai récupéré un paquer de données provenant d'une base de données dans un tableau : une ligne de données récupérée par mysql_fetch_assoc directement ajoutée au tableau en question. J'ai donc un tableau dont chaque ligne est un tableau associatif. Les clés de ces lignes contiennent notamment date, theme et titre. Je voudrais pouvoir trier l'ensemble du tableau d'un coup, par (date décroissante, titre croissant), puis par (theme croissant, titre croissant). J'ai regardé du côté des fonctions de tri de tableaux, mais l'utilisation de array_multisort dans ce cas ne me parait pas évidente du tout. Quelqu'un pourrait m'aider, svp ? Merci PS : Chti bout de code pour éclaircir la chose $tabData = array ();while ($lineData = mysql_fetch_assoc ($resultSql)){ array_push ($tabData, $lineData);} Modifié 22 Mai 2005 par MarvinLeRouge Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sarc Posté 22 Mai 2005 Partager Posté 22 Mai 2005 Salut Il ne serait pas plus judicieux de trier dès la requète SQL ? Il me semble plus judicieux de faire ça plutôt qu'en PHP... Une étape au lieu de deux lol Lien vers le commentaire Partager sur d’autres sites More sharing options...
MarvinLeRouge Posté 22 Mai 2005 Auteur Partager Posté 22 Mai 2005 Ben non justement : Je dois traiter 2 fois les mêmes données dans ma page, suivant 2 tris différents. Donc, si je voulais le faire en sql, ça impliquerait de faire 2 requètes, pour récupérer un seul paquet de données, ce qui est aberrant. C'est pour ça que je cherche à trier en php. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Thanh Posté 22 Mai 2005 Partager Posté 22 Mai 2005 Va voir du coté de: http://www.php.net/array_multisort Bien cool comme fonction Lien vers le commentaire Partager sur d’autres sites More sharing options...
MarvinLeRouge Posté 23 Mai 2005 Auteur Partager Posté 23 Mai 2005 Es-tu certain d'avoir lu le message d'origine jusqu'au bout ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
MarvinLeRouge Posté 23 Mai 2005 Auteur Partager Posté 23 Mai 2005 J'ai essayé avec usort, mais il ne semble pas fonctionner correctement quand le tableau est un membre d'un objet. Pliizzz help Lien vers le commentaire Partager sur d’autres sites More sharing options...
Thanh Posté 23 Mai 2005 Partager Posté 23 Mai 2005 Utilises des tableaux pour stocker les valeurs : $tabTheme = array ();$tabTitre = array ();$tabDate = array ();while ($lineData = mysql_fetch_object ($resultSql)){ array_push ($tabTheme , $lineData->theme); array_push ($tabTitre , $lineData->titre); array_push ($tabDate , $lineData->date);} Puis utilises array_multisort. Lien vers le commentaire Partager sur d’autres sites More sharing options...
MarvinLeRouge Posté 23 Mai 2005 Auteur Partager Posté 23 Mai 2005 Ce qui obligerait à créer autant de tableaux qu'il y a de colonnes dans la requète aïe aïe aïe Quelqu'un aurait une autre idée (comme la façon de faire marcher usort dans un objet par exemple) ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 24 Mai 2005 Partager Posté 24 Mai 2005 Personnellement, je ferais 2 requètes. Que tu fasses le tri en php ou en mysql, ca revient au même, tu récupères les résultats. D'un certain coté, comme tu dis, il faut mieux éviter 2 requètes là où 1 est suffisante. D'un autre coté, mysql est plus rapide que php, et tu n'y gagnerais pas forcément grand chose à le faire en php.. Ceci dit, je m'y suis collé, et ca donne ceci : $tabData[0]['date'] = "10";$tabData[0]['theme'] = "100";$tabData[0]['titre'] = "1000";$tabData[2]['date'] = "1000";$tabData[2]['theme'] = "10";$tabData[2]['titre']= "100";$tabData[3]['date']= "100";$tabData[3]['theme'] = "1000";$tabData[3]['titre'] = "10";$tabData[4]['date']= "100";$tabData[4]['theme'] = "100";$tabData[4]['titre'] = "10";$tabData[5]['date']= "15";$tabData[5]['theme'] = "100";$tabData[5]['titre'] = "15";$tabData[6]['date']= "5";$tabData[6]['theme'] = "100";$tabData[6]['titre'] = "5";function compare($a,$b){ GLOBAL $tabData,$cle,$ord; if ($tabData[$a][$cle]==$tabData[$b][$cle]) return($tabData[$a]['titre'] > $tabData[$b]['titre'])?1:-1; if ($ord=="desc") return ($tabData[$a][$cle] > $tabData[$b][$cle]) ? -1 : 1; else return ($tabData[$a][$cle] < $tabData[$b][$cle]) ? -1 : 1; }$cle="theme";$ord="desc";uksort($tabData,"compare");foreach($tabData as $k => $v)echo"<br>".$k."-->".$v[$cle]. " <br> ".$v['titre']; Un p'tit peu d'explications. le tableau tout en haut, c'est pour te montrer qu'apparemment ca marche. Le tri sur le 'titre' se fait automatiquement. Ensuite, tu peux trier sur le theme, ou sur la date, que j'ai mis en variable $cle. Tu modifies cette variable, ca modifiera le tri. Pour l'ordre, c'est idem. une variable $ord, que tu mets à 'desc', ou 'asc', comme tu veux. Si ca bugge, ben.. je suis là Anonymus. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant