Tableau dynamique et tri

Tableau dynamique et tri - PHP - Programmation

Marsh Posté le 08-04-2006 à 21:11:38    

Bonsoir,
 
Je souhaiterais pouvoir remplir un tableau dont je ne connais pas initialement la taille.
Ce tableau est rempli en collectant les données d'une table de données puis d'une autre.
En fonction d'une clé commune je souhaiterais ensuite pouvoir le trier.
 
Je vous remercie par avance de vos réponses.
 
Voici un essai faux mais qui représente ce que je voudrais faire...

Code :
  1. if (isset($annee))
  2. {
  3.   $requete = "SELECT * FROM SDL_Objectif ORDER BY Date, IdObject ASC";
  4.   $resultat = mysql_query($requete) or die('Erreur SQL !<br>Requete : '.$requete.'<br>'.mysql_error());
  5.   $i=0;
  6.   while ($ligne = mysql_fetch_assoc($resultat))
  7.   {
  8.     $chaine = $ligne['Date'];
  9.     if ((substr($chaine, 0, 4))==$annee)
  10.     {
  11.       $requete2 = "SELECT * FROM SDL_ObjTex WHERE IdObjEns=".$ligne['IdObject'];
  12.       $resultat2 = mysql_query($requete2) or die('Erreur SQL !<br>Requete : '.$requete2.'<br>'.mysql_error());
  13.       while ($ligne2 = mysql_fetch_assoc($resultat2))
  14.       {
  15.         $i = $i +1;
  16.         $tab[$i]=array('Chapitre'=> $ligne2['IdObject'], 'Ligne' => $ligne2['IdObjEns'], 'Position' => $ligne2['Position'],'Type' => 'Tex', 'Id' => $ligne2['IdObjTex']);
  17.       }
  18.       $requete3 = "SELECT * FROM SDL_ObjTex WHERE IdObjEns=".$ligne['IdObject'];
  19.       $resultat3 = mysql_query($requete3) or die('Erreur SQL !<br>Requete : '.$requete3.'<br>'.mysql_error());
  20.       while ($ligne3 = mysql_fetch_assoc($resultat3))
  21.       {
  22.         $i = $i +1;
  23.         $tab[$i]=array('Chapitre'=> $ligne3['IdObject'], 'Ligne' => $ligne3['IdObjEns'], 'Position' => $ligne3['Position'], 'Type' => 'Img', 'Id' => $ligne3['IdObjImg']);
  24.       }
  25.     }
  26.   }
  27.  
  28.   // Fonction de tri
  29.  
  30.   // Fonction d'affichage
  31. }

Reply

Marsh Posté le 08-04-2006 à 21:11:38   

Reply

Marsh Posté le 08-04-2006 à 23:35:10    

tu ne peut pas faire une seule requête?

Reply

Marsh Posté le 09-04-2006 à 11:02:31    

c possible je pense, mais je ne c pas comment faire

Reply

Marsh Posté le 09-04-2006 à 12:01:30    

Ben cherche, car la tu as un nombre bcp bcp trop importants de requetes :o et donc d'accès à MySQL.
Et surtout que c'est tres simple de faire en une seule requete.


Message édité par Sebastien le 09-04-2006 à 12:03:55
Reply

Marsh Posté le 09-04-2006 à 12:15:49    

Dorian BAC+4 a écrit :

Bonsoir,
 
Je souhaiterais pouvoir remplir un tableau dont je ne connais pas initialement la taille.


 
Pas de pb, en php, tes tableaux sont toujours dynamiques. T'as besoin d'un nouvel élément ben tu l'écris et hop, tu l'as.  
 
Exemple  
Tu as une boucle et tu veux rajouter une nouvelle valeur dans ton tableau à chaque tour de boucle (ce qui est caractéristique d'un tableau dynamique), tu affectes juste ta variable avec des crochets sans argument, le php se chargera tout seul d'y mettre l'indice qui va bien  

while (....)  
{  
   $tab[]=la valeur que tu veux;  
}


 
Tu as maintenant accès à tout le tableau allant de "$tab[0]" à "$tab[...]"
 
Avec ça, plus de soucis de taille (sauf si ça dépasse ta capacité mémoire)...
 
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 09-04-2006 à 12:52:40    

Pour le tri d'un tableau php déjà rempli, voir sort(), asort(), arsort(), ksort(), krsort() dans la doc...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 09-04-2006 à 12:54:03    

(éventuellement natsort() et natcasesort(), même...bref ya surement tout ce qu'il te faut dans la doc... :o )


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 09-04-2006 à 12:54:53    

...et si vraiment rien de celles-ci ne fait ce que tu veux, ya évidemment usort(), uasort() et uksort()... :D


Message édité par skeye le 09-04-2006 à 12:55:20

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 09-04-2006 à 13:14:59    

Array (  
[0] => Array ( [Chapitre] => 8 [Ligne] => 1 [Position] => 2 [Type] => Tex [Id] => 13 )  
[1] => Array ( [Chapitre] => 8 [Ligne] => 2 [Position] => 1 [Type] => Tex [Id] => 14 )  
[2] => Array ( [Chapitre] => 8 [Ligne] => 3 [Position] => 1 [Type] => Tex [Id] => 15 )  
[3] => Array ( [Chapitre] => 8 [Ligne] => 4 [Position] => 2 [Type] => Tex [Id] => 16 )  
[4] => Array ( [Chapitre] => 8 [Ligne] => 5 [Position] => 1 [Type] => Tex [Id] => 17 )  
[5] => Array ( [Chapitre] => 8 [Ligne] => 6 [Position] => 1 [Type] => Tex [Id] => 18 )  
[6] => Array ( [Chapitre] => 8 [Ligne] => 1 [Position] => 1 [Type] => Img [Id] => 14 )  
[7] => Array ( [Chapitre] => 8 [Ligne] => 2 [Position] => 2 [Type] => Img [Id] => 15 )  
[8] => Array ( [Chapitre] => 8 [Ligne] => 4 [Position] => 1 [Type] => Img [Id] => 16 )  
[9] => Array ( [Chapitre] => 8 [Ligne] => 6 [Position] => 2 [Type] => Img [Id] => 17 ) )  
 
Voila ce que j'obtiens...
 
Je souhaiterais pouvoir classer ce tableau à la fois par ligne puis par position!
 
Afin d'obtenir :
 
Array (  
[0] => Array ( [Chapitre] => 8 [Ligne] => 1 [Position] => 1 [Type] => Img [Id] => 14 )
[1] => Array ( [Chapitre] => 8 [Ligne] => 1 [Position] => 2 [Type] => Tex [Id] => 13 )
[2] => Array ( [Chapitre] => 8 [Ligne] => 2 [Position] => 1 [Type] => Tex [Id] => 14 )
[3] => Array ( [Chapitre] => 8 [Ligne] => 2 [Position] => 2 [Type] => Img [Id] => 15 )
[4] => Array ( [Chapitre] => 8 [Ligne] => 3 [Position] => 1 [Type] => Tex [Id] => 15 )
[5] => Array ( [Chapitre] => 8 [Ligne] => 4 [Position] => 1 [Type] => Img [Id] => 16 )
[6] => Array ( [Chapitre] => 8 [Ligne] => 4 [Position] => 2 [Type] => Tex [Id] => 16 )
[7] => Array ( [Chapitre] => 8 [Ligne] => 5 [Position] => 1 [Type] => Tex [Id] => 17 )
[8] => Array ( [Chapitre] => 8 [Ligne] => 6 [Position] => 1 [Type] => Tex [Id] => 18 )
[9] => Array ( [Chapitre] => 8 [Ligne] => 6 [Position] => 2 [Type] => Img [Id] => 17 ) )

Reply

Marsh Posté le 09-04-2006 à 13:18:34    

tu devrais t'en sortir sans trop de difficultés avec usort()


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 09-04-2006 à 13:18:34   

Reply

Marsh Posté le 09-04-2006 à 16:02:08    

Bof rien que s'il fait bien sa requete, il devrait deja avoir tout rangé correctement, et pas besoin d'ajouter du traitement php par dessus.

Code :
  1. SELECT SOT.*
  2. FROM SDL_Objectif SOE, SDL_ObjTex SOT
  3. WHERE SOT.IdObjEns = SOE.IdObject
  4. ORDER BY
  5. SOE.IdOject,
  6. SOE.IdObjEns,
  7. SOE.Position


 
Par contre faut m'expliquer comme avec requete2 et requete3 identiques tu finis avec plus de Text que d'IMG :o


Message édité par Sebastien le 09-04-2006 à 16:08:23
Reply

Marsh Posté le 09-04-2006 à 16:09:49    

Il pose une question dans la cat' php, je donne une réponse php...doù le "Pour le tri d'un tableau php déjà rempli," au début de ma première réponse...[:petrus75]
 
Mais c'est sûr que ce serait nettement plus intelligent de récupérer les données directement dans le bon ordre... ;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 09-04-2006 à 19:32:10    

skeye a écrit :

Il pose une question dans la cat' php, je donne une réponse php...doù le "Pour le tri d'un tableau php déjà rempli," au début de ma première réponse...[:petrus75]
 
Mais c'est sûr que ce serait nettement plus intelligent de récupérer les données directement dans le bon ordre... ;)


Autant l'aider à choisir les meilleurs idées :)
Il n'avait pas forcement l'air de partir sur une solution 100% php mais plutot de trouver comment faire.
Donc un mixte de nos deux réponses [la tienne pour sa culture G, la mienne pour une solution complète à son problème] est parfait

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed