Aller au contenu

Sujets conseillés

Posté (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é par MarvinLeRouge
Posté

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

Posté

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.

Posté

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.

Posté

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

Posté

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.

Veuillez vous connecter pour commenter

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



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