Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3257 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1792658
Gazette
Posté le 26-09-2008 à 19:01:45  profilanswer
 

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
mood
Publicité
Posté le 26-09-2008 à 19:01:45  profilanswer
 

n°1792665
flo850
moi je
Posté le 26-09-2008 à 19:33:37  profilanswer
 

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 ,...

n°1792666
KangOl
Profil : pointeur
Posté le 26-09-2008 à 19:55:11  profilanswer
 

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...
n°1792742
Gazette
Posté le 27-09-2008 à 01:06:19  profilanswer
 

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
n°1792755
skeye
Posté le 27-09-2008 à 10:07:10  profilanswer
 

usort().


---------------
Can't buy what I want because it's free -
n°1792762
Gazette
Posté le 27-09-2008 à 11:48:42  profilanswer
 

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

n°1792763
skeye
Posté le 27-09-2008 à 11:49:33  profilanswer
 

comment ça, tout?


---------------
Can't buy what I want because it's free -
n°1792768
Gazette
Posté le 27-09-2008 à 12:55:21  profilanswer
 

skeye a écrit :

comment ça, tout?


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

n°1792777
Ricco
Retour au pays
Posté le 27-09-2008 à 14:52:16  profilanswer
 

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
n°1792778
skeye
Posté le 27-09-2008 à 14:57:08  profilanswer
 

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 -
mood
Publicité
Posté le 27-09-2008 à 14:57:08  profilanswer
 

n°1792807
Gazette
Posté le 27-09-2008 à 19:38:27  profilanswer
 

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.

n°1792808
skeye
Posté le 27-09-2008 à 19:39:40  profilanswer
 

foreach sur le tableau généré.


---------------
Can't buy what I want because it's free -
n°1792811
Gazette
Posté le 27-09-2008 à 19:54:16  profilanswer
 

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.

n°1793083
Gazette
Posté le 28-09-2008 à 18:53:51  profilanswer
 

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
n°1793093
skeye
Posté le 28-09-2008 à 19:05:12  profilanswer
 

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 -
n°1793102
Gazette
Posté le 28-09-2008 à 19:24:05  profilanswer
 

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.

n°1793127
Ricco
Retour au pays
Posté le 28-09-2008 à 20:32:24  profilanswer
 

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
n°1793140
Gazette
Posté le 28-09-2008 à 22:35:47  profilanswer
 

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.

n°1793177
Gazette
Posté le 29-09-2008 à 01:07:35  profilanswer
 

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

n°1793188
skeye
Posté le 29-09-2008 à 08:12:30  profilanswer
 

non. Regarde la fonction usort().


---------------
Can't buy what I want because it's free -
n°1793265
grosbin
OR die;
Posté le 29-09-2008 à 11:39:58  profilanswer
 

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
n°1793292
Gazette
Posté le 29-09-2008 à 12:06:35  profilanswer
 

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.

n°1793295
flo850
moi je
Posté le 29-09-2008 à 12:08:51  profilanswer
 

c'est gentil de nous copier /coller la doc

n°1793299
grosbin
OR die;
Posté le 29-09-2008 à 12:12:07  profilanswer
 

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
n°1793336
Gazette
Posté le 29-09-2008 à 13:46:50  profilanswer
 

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

n°1793360
grosbin
OR die;
Posté le 29-09-2008 à 14:48:10  profilanswer
 

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
n°1793384
Gazette
Posté le 29-09-2008 à 15:19:17  profilanswer
 

Oui c'est ce que je voulais.

n°1793419
grosbin
OR die;
Posté le 29-09-2008 à 16:05:23  profilanswer
 

bah asort alors :jap:


---------------
Photos Panoramiques Montagnes Haute Savoie
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
XSLT a partir de javascriptrechercher une date à partir d'un combobox
Problème De HTML et CSS[Résolu] Problème avec une boucle
Tableau PHP en tableau javascript : ProblemePhp Usort Array
problème de conversionProbleme de disposition en CSS
[AJAX] Problème avec innerHTML=xhr_object.responseTextProblème redirection .tk
Plus de sujets relatifs à : Array crée a partir d'une bdd (probléme)...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR