Tableau a 3 dimensions [Résolu]

ldevun
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Dernière intervention
7 avril 2009
- 21 août 2006 à 19:29 - Dernière réponse : cs_eXon
Messages postés
167
Date d'inscription
lundi 17 janvier 2005
Dernière intervention
8 avril 2007
- 23 août 2006 à 02:26
Bonjour, j'essaye de créé un tableau a 3 dimensions, mais celui-ci ne fonctionne pas bien, voici mon code :

<? include ("host.php");
$requete = "SELECT p.id_prod, nom_prod, image_prod, prix_prod, notice_prod, doc_prod, nom_ssfam,nom_fam  FROM produit p, sousfamille s,lien l, famille f WHERE l.id_prod=p.id_prod AND l.id_ssfam=s.id_ssfam AND f.id_fam=s.id_fam  ORDER BY nom_ssfam";
      $result = mysql_query($requete) or die ('Erreur : '.mysql_error() );
      while($ln = mysql_fetch_assoc($result)){
       
       
      
       $tableau["grandtitre"] = $ln['nom_fam'];
       $tableau["famille"]["titre"] = $ln['nom_ssfam'];       
       $tableau["famille"]["produits"]["id"] = $ln['id_prod']; 
       $tableau["famille"]["produits"]["designation"] = $ln['nom_prod'];       
       $tableau["famille"]["produits"]["prix"] = $ln['prix_prod'];
       $tableau["famille"]["produits"]["image"] = $ln['image_prod'];
       $tableau["famille"]["produits"]["pdf1"] = $ln['notice_prod'];
       $tableau["famille"]["produits"]["pdf2"] = $ln['doc_prod'];
       
       }


      
          echo $tableau["grandtitre"];
              
      foreach ($tableau as $tab) {
      ?>  ----

          <?=$tab["grandtitre"]; ?>,
 

      <?foreach ($tableau["famille"] as $cat) {
      
      ?>
      

    ----

          &nbsp;&nbsp;<?=$cat['titre']?>,
 

   


         <?
      foreach ($tableau[\"famille\"][\"produits\"] as $produit) {
      ?>
      
      ----

      <?=$produit['id']?>,
      <?=$produit['designation']?>,
      <?=$produit['prix']?>,
            <?=$produit['id']?>,
      <?=$produit['pdf1']?>,
      <?=$produit['pdf2']?>,
      
      <?
      }
      
      echo '

';
      }
      }
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
cs_eXon
Messages postés
167
Date d'inscription
lundi 17 janvier 2005
Dernière intervention
8 avril 2007
- 23 août 2006 à 02:26
3
Merci
La facon la plus aproprié serait de mettre le numéro qui incrémente au début de la variable
$i = 0;
while($ln = mysql_fetch_assoc($result)){
       $tableau[$i]["grandtitre"] = $ln['nom_fam'];
       $tableau[$i]["famille"]["titre"] = $ln['nom_ssfam'];       
       $tableau[$i]["famille"]["produits"]["id"] = $ln['id_prod']; 
       $tableau[$i]["famille"]["produits"]["designation"] = $ln['nom_prod'];       
       $tableau[$i]["famille"]["produits"]["prix"] = $ln['prix_prod'];
       $tableau[$i]["famille"]["produits"]["image"] = $ln['image_prod'];
       $tableau[$i]["famille"]["produits"]["pdf1"] = $ln['notice_prod'];
       $tableau[$i]["famille"]["produits"]["pdf2"] = $ln['doc_prod'];
       $i++;
}

L'on est obligé d'utiliser une variable d'incrémention parce qu'il faut récupérer le numéro du premier pour le garder pour chacun. Par la suite, tu peux utiliser une fonction du genre pour tous les afficher:

foreach($tableau as $value)
{
       echo $value["grandtitre"];
       echo $value["famille"]["titre"];
       [...]
}

----------------
eXon

Merci cs_eXon 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_eXon
davwart
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Dernière intervention
28 juillet 2009
- 22 août 2006 à 09:03
0
Merci
Salut

je n'ai pas regardé ton code en details mais...
1 - tu dis ça ne fonctionne pas tres bien..ok , mais qu'est ce que ça affiche alors ?
2 - je parierai sur le fait que ton tableau n'a qu'une seule entrée produit car quand tu fait ça:
     while($ln = mysql_fetch_assoc($result)){     
       $tableau["grandtitre"] = $ln['nom_fam'];
       $tableau["famille"]["titre"] = $ln['nom_ssfam'];       
       $tableau["famille"]["produits"]["id"] = $ln['id_prod']; 
       $tableau["famille"]["produits"]["designation"] = $ln['nom_prod'];       
       $tableau["famille"]["produits"]["prix"] = $ln['prix_prod'];
       $tableau["famille"]["produits"]["image"] = $ln['image_prod'];
       $tableau["famille"]["produits"]["pdf1"] = $ln['notice_prod'];
       $tableau["famille"]["produits"]["pdf2"] = $ln['doc_prod'];     
       }
tu ecrases les valeurs de ton tableau à chaque tour de boucle, au lieu de les ajouter....
par exemple, si tu veux ajouter un produit :
$tableau["famille"]["produits"] [] =array("id" => $ln['id_prod'],  "designation" => $ln['nom_prod'], ....)

-------------------------------------

Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
Commenter la réponse de davwart
ldevun
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Dernière intervention
7 avril 2009
- 22 août 2006 à 09:30
0
Merci
Bonjour,
J'ai suivi ton conseil et le probleme c'est qu'il m'affiche pour chaque titre et grand titre tous les produits alor que je souhaite que pour chaque grand titre il m'affiche les titres et les produits de ces titres. Voila mon nouveau code, je sais pas si j'ai été très clair?

while($ln = mysql_fetch_assoc($result)){
       
       
      
       $tableau["grandtitre"] = $ln['nom_fam'];
       $tableau["famille"]["titre"] = $ln['nom_ssfam'];       
       $tableau["famille"]["produits"]["id"] = $ln['id_prod']; 
       $tableau["famille"]["produits"]["designation"] = $ln['nom_prod'];       
       $tableau["famille"]["produits"]["prix"] = $ln['prix_prod'];
       $tableau["famille"]["produits"]["image"] = $ln['image_prod'];
       $tableau["famille"]["produits"]["pdf1"] = $ln['notice_prod'];
       $tableau["famille"]["produits"]["pdf2"] = $ln['doc_prod'];
       
       }
Commenter la réponse de ldevun

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.