Array crée a partir d'une bdd (probléme)...

Array crée a partir d'une bdd (probléme)... - PHP - Programmation

Marsh Posté le 26-09-2008 à 19:01:45    

Bonjours tout le monde.
 
Donc voici mon problème, j'ai une base de donnée dont j'utilise certaines colonnes pour généré une variable, cette variable générer pour chaque ligne je la récupère pour la mettre avec le reste dans un tableau.
 
Mon tableau a 11 colonnes, dont 8 dont les données sont directement extraite de la base et 3 qui sont généré.
 
Je cherche une solution pour crée un tableau de ce type et surtout trier les données avec ces fameuses données généré donc pas possible avec mysql.
 
J'ai essayer plusieurs solution avec php mais a chaque fois je tombe sur un problème, déjà parce que je voudrais me passé de print_ar pour pouvoir placé mes données ou je veux et évidement pas en afficher certaines.
 
Merci d'avance

Message cité 1 fois
Message édité par Gazette le 27-09-2008 à 00:34:39
Reply

Marsh Posté le 26-09-2008 à 19:01:45   

Reply

Marsh Posté le 26-09-2008 à 19:33:37    

1- montre nous ton ableau ( sa structure en tout cas )  
2- explique nous l'ordre de tri que tu voudrai avoir  
3- vérifie que tu as regardé du coté des fonctions sort, usort ,...

Reply

Marsh Posté le 26-09-2008 à 19:55:11    

Gazette a écrit :


Mon tableau a 11 colonnes, dont 9 dont les données sont directement extraite de la base et 3 qui sont généré.


apprends à compter.
après, tu pourras éventuellement apprendre à programmer :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 27-09-2008 à 01:06:19    

flo850 a écrit :

1- montre nous ton ableau ( sa structure en tout cas )  
2- explique nous l'ordre de tri que tu voudrai avoir  
3- vérifie que tu as regardé du coté des fonctions sort, usort ,...


 
Pour l'instant j'ai une requete je crée un tableau et je le remplit.
 

Code :
  1. while ($donnees = mysql_fetch_array($reponse) )
  2. {
  3. $tableau['titre'] = array ($donnees['titre']);
  4. $tableau['date1'] = array ($date1);
  5. $tableau['date2'] = array ($date2);
  6. $tableau['cat'] = array ($donnees['cat']);
  7. $tableau['cp'] = array ($donnees['cp']);
  8. $tableau['vi'] = array ($donnees['vi']);
  9. $tableau['lien'] = array ($donnees['lien']);
  10. $tableau['distance'] = array ($d);
  11. $tableau['sur'] = array ($donnees['sur'];
  12. $tableau['co'] = array ($donnees['co']);
  13. $tableau['id'] = array ($donnees['id']);


 
Voila quel type de tableau il me faut

Code :
  1. echo'<tr bgcolor="#FFC79D">';
  2. echo     '<td width="200"><a href="annonce.php?id='. $final['id'][$i] .'"><FONT COLOR="#339933">'. $final['titre'][$i] .'</a></td>';
  3. echo     '<td width="90">'. $tableau['date1'] .'</td>';
  4. echo     '<td width="90">'. $tableau['date2'] .'</td>';
  5. echo     '<td width="150">'. $tableaul'] .'</td>';
  6. echo     '<td width="90">'. $tableau['cp'] .'</td>';
  7. echo     '<td width="302">'. $tableau['vi'] .'</td>';
  8. echo     '<td width="30">'. $tableau['distance'] .'km</td>;
  9. echo '</tr>';
  10. }


Voila la façon dont je le présente dans la boucle
 
Les variable $date1 $date2 et $h sont des résultat générer.
 
Je voudrais savoir comment je peut trier le tableau que j'ai au dessus justement par rapport a cette variable $h qui est numérique, et ensuite l'afficher comme dans mon tableau html au dessus.


Message édité par Gazette le 27-09-2008 à 01:06:52
Reply

Marsh Posté le 27-09-2008 à 10:07:10    

usort().


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

Marsh Posté le 27-09-2008 à 11:48:42    

Ok et sinon comment ça se passe je met tout dans la boucle while ($donnees = mysql_fetch_array($reponse) ) ?

Reply

Marsh Posté le 27-09-2008 à 11:49:33    

comment ça, tout?


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

Marsh Posté le 27-09-2008 à 12:55:21    

skeye a écrit :

comment ça, tout?


 
 
Et bien la création du tableau, + tri + affichage des données?

Reply

Marsh Posté le 27-09-2008 à 14:52:16    

Gazette a écrit :

Ok et sinon comment ça se passe je met tout dans la boucle while ($donnees = mysql_fetch_array($reponse) ) ?

 

Je comprends pas ce que tu fais là ....

 

ça ressemble à quoi quand tu fais un print_r( $tableau ) ? En fait j'ai plutôt l'impression que tu voudrais faire un

 
Code :
  1. while ($donnees = mysql_fetch_array($reponse) )
  2. {
  3. $tableau['titre'][] = $donnees['titre'];
  4. ...
  5. }


ou plutôt un

 
Code :
  1. while ($donnees = mysql_fetch_array($reponse) )
  2. {
  3. $donnees['date1'] = .... ;
  4. $tableau[] = $donnees;
  5. }
 


mais là c'est pas du tout la même chose. Dans ton code j'ai l'impression que tu retrouvera juste dans $tableau le dernier résultat de ta requète.
Sinon quels sont donc ces traitements sur les date que tu peux faire en php mais pas en sql ??


Message édité par Ricco le 27-09-2008 à 14:54:54

---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
Reply

Marsh Posté le 27-09-2008 à 14:57:08    

Gazette a écrit :


 
 
Et bien la création du tableau, + tri + affichage des données?


 
tu comptes trier avant d'avoir toutes les données? T'as pas l'impression que c'est crétin?


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

Marsh Posté le 27-09-2008 à 14:57:08   

Reply

Marsh Posté le 27-09-2008 à 19:38:27    

Ok je commence a comprendre,
 
Je fait ma requette et je crée mon tableau dans la même boucle.
 

Code :
  1. while ($donnees = mysql_fetch_array($reponse) )
  2. {
  3. $tableau['titre'][] = $donnees['titre'];
  4. ...
  5. }


 
Ensuite je tri avec usort et ensuite je recrée une boucle pour afficher, par contre je ne sais pas comment faire en sorte de recrée cette boucle par rapport au nombre de lignes qui va sortir.

Reply

Marsh Posté le 27-09-2008 à 19:39:40    

foreach sur le tableau généré.


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

Marsh Posté le 27-09-2008 à 19:54:16    

skeye a écrit :

foreach sur le tableau généré.


 
Ok je viens de comprendre, merci beaucoup pour votre aide je vais m'en sortir grâce a ces infos.

Reply

Marsh Posté le 28-09-2008 à 18:53:51    

Je vais encore avoir besoin de vos services, quand je fait print_r
 

Code :
  1. $tableau["titre"][]= htmlspecialchars_decode($donnees['titre']);
  2. $tableau["datef1"][]= $datefr1;
  3. $tableau["datef2"][]= $datefr2;
  4. $tableau["cat"][]= $donnees['cat'];
  5. $tableau["cp"][]= $donnees['cp'];
  6. $tableau["vi"][]= htmlspecialchars_decode ($donnees['vi']);
  7. $tableau["lien"][]= htmlspecialchars_decode ($donnees['lien']);
  8. $tableau["distance"][]= $h;
  9. $tableau["sur"][]= $donnees['sur'];
  10. $tableau["co"][]= $donnees['type'];
  11. $tableau["id"][]= $donnees['id'];
  12. }
  13.  
  14. usort($tableau, create_function('$a,$b',"return\$a['distance']-\$b['distance'];" ));


 
La dessus j'obtient tout mes tableau comme ça
 
Array ( [0] => Array ( [0] => 13 [1] => 16 [2] => 8 [3] => 8 [4] => 11 [5] => 0 [6] => 11 [7] => 7 [8] => 4 )  
[1] => Array ( [0] => [1] => on [2] => [3] => [4] => [5] => [6] => [7] => [8] => )  
[2] => Array ( [0] => 1 [1] => 1 [2] => 2 [3] => 2 [4] => 2 [5] => 2 [6] => 2 [7] => 2 [8] => 2 )....
 
Donc la c'est ok j'ai mes 11 tableaux pour l'instant ils ne sont pas dans l'ordre que je veux mais ce n'est pas grave mais pour y affiché j'éprouve des difficultés.
 

Code :
  1. foreach ($tableau as $key => $value)
  2. {
  3. echo'<tr bgcolor="#FFC79D">';
  4. echo     '<td width="200"><a href="annonce.php?id='. $value[$key] .'"><FONT COLOR="#339933">'. $value[$key] .'</a></td>';
  5. echo     '<td width="90">'. $value[$key] .'</td>';
  6. echo     '<td width="90">'. $value[$key] .'</td>';
  7. echo     '<td width="150">'. $value[$key] .'</td>';
  8. echo     '<td width="90">'. $value[$key] .'</td>';
  9. echo     '<td width="302">'. $value[$key] .'</td>';
  10. echo     '<td width="30">'. $value[$key] .'km</td>';
  11. echo '</tr>';


 
Et la ça m'affiche la même entré a chaque ligne je me dit normal c'est la même valeur et la impossible en rentrant les clé de bien orienté mes valeurs je voudrais que dans la ligne titre, mes titres soient affiché ect, donc j'ai fait ceci
 
 

Code :
  1. foreach ($tableau as $key => $value)
  2. {
  3. echo'<tr bgcolor="#FFC79D">';
  4. echo     '<td width="200"><a href="annonce.php?id='. $value[3][$key] .'"><FONT COLOR="#0066CC">'. $value[10][$key] .'</a></td>';
  5. echo     '<td width="90">'. $value[6][$key] .'</td>';
  6. echo     '<td width="90">'. $value[7][$key] .'</td>';
  7. echo     '<td width="150">'. $value[8][$key] .'</td>';
  8. echo     '<td width="90">'. $value[9][$key] .'</td>';
  9. echo     '<td width="302">'. $value[5][$key] .'</td>';
  10. echo     '<td width="30">'. $value[0][$key] .'km</td>';
  11. echo '</tr>';


 
Pensant pouvoir aiguillé les clés ou je veux
 
 
Et la ça m'affiche pareil
 

Code :
  1. 13 13 13 13  0 13km
  2. 2 2 2 2  2 2km
  3. 17 17 17 17  26 17km


 
Cad l'adresse 0 des 7 clés dans chaque colonne alors que ces infos je cherche à les mettre dans les lignes.
 
2 Problèmes je cherche a placé le tableau dans le bon sens, et le 2nd je ne sais pas pourquoi la variable $key reste la même dans chaque boucle même avec le foreach.

Message cité 1 fois
Message édité par Gazette le 28-09-2008 à 18:56:24
Reply

Marsh Posté le 28-09-2008 à 19:05:12    

Gazette a écrit :

Code :
  1. foreach ($tableau as $key => $value)
  2. { $value[$key]




Faire ceci n'a pas de sens, regarde la doc de foreach...

Message cité 1 fois
Message édité par skeye le 28-09-2008 à 19:05:54

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

Marsh Posté le 28-09-2008 à 19:24:05    

skeye a écrit :


Faire ceci n'a pas de sens, regarde la doc de foreach...


 
J'ai choppé ça sur un forum, je comprend ce que tu veux dire, je pensais qu'avec foreach on gardait l'adressage des données mais en fait non on a la ligne sous la variable $value et rien d'autre, il faut que fasse comment pour avoir l'adressage des données par exemple $value[clé:1][7éme valeurs] et évidement chaque boucle traite une ligne à chaque fois.

Reply

Marsh Posté le 28-09-2008 à 20:32:24    

Si tu veux faire des affichages lignes par lignes il faut stocker les résultats de la requête ligne par ligne. Donc plutôt des $tableau[] = $données genre le tableau aura la forme
array ( array("titre"=>23,"cat"=>...) , array( "titre" => 18 , ... ) , ...  )
Mais la ça va pas te plaire pour faire le tri.  
Je me répète mais je pense que tes calculs de distances seront surement fait beaucoup plus rapidement par mysql que par le php. Faut toujours laisser le moins de boulot possible au php.


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
Reply

Marsh Posté le 28-09-2008 à 22:35:47    

Ricco a écrit :

Si tu veux faire des affichages lignes par lignes il faut stocker les résultats de la requête ligne par ligne. Donc plutôt des $tableau[] = $données genre le tableau aura la forme
array ( array("titre"=>23,"cat"=>...) , array( "titre" => 18 , ... ) , ...  )
Mais la ça va pas te plaire pour faire le tri.  
Je me répète mais je pense que tes calculs de distances seront surement fait beaucoup plus rapidement par mysql que par le php. Faut toujours laisser le moins de boulot possible au php.


 
 
Donc tu pense que je ferais mieux d'insérer les résultats dans une base temporaire et faire un order by distance, oui je doit dire que pour faire le tri j'ai du mal.

Reply

Marsh Posté le 29-09-2008 à 01:07:35    

Pour faire ce que je veux, il faudrait que je recrée un array avec les valeurs trié?

Reply

Marsh Posté le 29-09-2008 à 08:12:30    

non. Regarde la fonction usort().


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

Marsh Posté le 29-09-2008 à 11:39:58    

Slt, je me rappelle de cette problèmatique .. y'à pas si longtemps
1) en premier, faire la maximum de tri via SQL, les commandes group by, find_in_set, order by find_in_set desc regorgent de possibilités
( pour avoir les enregistrement dans un ordre bien précis )
2) faire une boucle while($array=mysql_fetch_assoc($requete)) => tu conserves les clés des champs && c'est très utile pour lire ton code, savoir où tu places quel élément
3) si tu souhaites afficher les champs de ton array dans un ordre bien précis, il faudra opter pour une fonction home-made
( perso je n'y suis jamais arrivé avec uksort )

 

voilà :jap:


Message édité par grosbin le 29-09-2008 à 11:41:21

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 29-09-2008 à 12:06:35    

skeye a écrit :

non. Regarde la fonction usort().


 

Code :
  1. <?php
  2. function cmp($a, $b)
  3. {
  4.     return strcmp($a["fruit"], $b["fruit"]);
  5. }
  6. $fruits[0]["fruit"] = "lemons";
  7. $fruits[1]["fruit"] = "apples";
  8. $fruits[2]["fruit"] = "grapes";
  9. usort($fruits, "cmp" );
  10. while (list($key, $value) = each($fruits)) {
  11.     echo "\$fruits[$key]: " . $value["fruit"] . "\n";
  12. }
  13. ?>


 
Il faut que je fasse un code comme ça.

Reply

Marsh Posté le 29-09-2008 à 12:08:51    

c'est gentil de nous copier /coller la doc

Reply

Marsh Posté le 29-09-2008 à 12:12:07    

au premier qui saura établir la fonction cmp qui retournera les champs du tableau dans un ordre bien précis :jap:

Code :
  1. apples vs lemons =>-1
  2. grapes vs apples =>1
  3. lemons vs apples =>1
  4. grapes vs lemons =>-1


ici ça retourne la comparaison de deux chaines dont les clés sont déterminées par ordre aléatoire & retourne -1,+1 qui agit je ne sais comment sur le tableau ..
à vos lanternes :jap:
( si je veux lemons, puis apples, puis grapes .. comment arbitrer cette fonction ?? )


Message édité par grosbin le 29-09-2008 à 12:29:24

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 29-09-2008 à 13:46:50    

J'ai réussi avec usort j'ai simplement déclaré mon tableau avec la colonne que je veux trier en 1ere position.
 
avec cette fonction
 

Code :
  1. function cmp($a, $b)
  2. {
  3.     if ($a == $b) {
  4.         return 0;
  5.     }
  6.     return ($a < $b) ? -1 : 1;
  7. }
  8. while (list($key, $value) = each($tableau))
  9. {


 
A ce moment je place mes colonnes comme ça $value['id'].
 
Merci a tous pour votre aide. ;)

Reply

Marsh Posté le 29-09-2008 à 14:48:10    

dans ce cas là tu ressors ton tableau de valeurs par ordre ascendant, est-ce bien ça ? ça équivaut à arsort() nan ?


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 29-09-2008 à 15:19:17    

Oui c'est ce que je voulais.

Reply

Marsh Posté le 29-09-2008 à 16:05:23    

bah asort alors :jap:


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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