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

  FORUM HardWare.fr
  Programmation
  PHP

  Remplir un tableau à plusieurs dimensions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Remplir un tableau à plusieurs dimensions

n°1970888
moreno911
Posté le 03-03-2010 à 16:29:03  profilanswer
 

Bonjour.
 
J'ai un peu de mal, au niveau algorithmique avec le problème suivant :
 
Je récupère une liste des catégories depuis MySQL, et je voudrais remplir un élément de type select (utilisation du framework de Zend ) avec les l'affichage des sous catégories.
 
Pour ce faire, je sais qu'il faut utiliser cette structure :
 
Code :
 
 
<?php
$array = array('Categorie_1' => array('Sous_cat_1', 'Sous_cat_2', 'Sous_cat_3'),
                     'Categorie_2'   => array('Sous_cat_1', 'Sous_cat_2', 'Sous_cat_3'));
        $select->setMultiOptions($array);
?>
 
C'est au niveau du remplissage du tableau $array que j'ai du mal.
 
La structure de ma BDD est la suivante :
 
____________________________________________________
id_|____nom_cat __________|_parent_cat_|_enfant_cat____|
1__|____Logiciel ___________|____0_______|_______0_____|
2__|____News_____________|____0_______|_______0_____|
3__|____burautique ________|____1_______|_______0_____|
4__|____Editeur de texte____|____1_______|_______3_____|
(structure de base de donnée non définitive, si elle est bof merci de me le signaler )
 
Dans cette exemple : Logiciel est une catégorie, qui contient les sous catégories : Bureautique. Cette derniere à une sous-sous catégories : Editeur de texte.
 
Je pense qu'il faudrait faire des foreach imbriqué, mais je ne vois pas comment m'en sortir
 
Une idée ?
 
 
Merci d'avance

mood
Publicité
Posté le 03-03-2010 à 16:29:03  profilanswer
 

n°1970929
Tirkyth
Posté le 03-03-2010 à 17:41:57  profilanswer
 

Je pars du postulat que ta table s'appelle categorie.

Code :
  1. $categories = array();
  2.  
  3. $result = mysql_query("SELECT nom_cat FROM categorie WHERE parent_cat = 0" );
  4. while ($category = mysql_fetch_assoc($result))
  5. {
  6.  if (!isset($categories[$category['nom_cat']]))
  7.  {
  8.    $categories[$category['nom_cat']] = array();
  9.  }
  10.  
  11.  $result2 = mysql_query("SELECT nom_cat FROM categorie WHERE parent_cat = ".$category['id']);
  12.  while ($subCategory = mysql_fetch_assoc($result2))
  13.  {
  14.    $categories[$category['nom_cat']][] = $subCategory['nom_cat'];
  15.  }
  16. }


 
Ca devrait te donner de quoi faire ce que tu veux faire.
 
Sinon, tu approfondis un peu plus ton poste, en donnant ce que tu as comme données si tu les as déjà récupérée dans ta base de données, etc.

n°1970961
moreno911
Posté le 03-03-2010 à 19:27:55  profilanswer
 

Salut :)
 
Merci pour ce code, il m'a permis d'avancer :)
 
Je l'ai un peu modifié, j'utilise notamment des boucles Foreach à la place des While, car les traités sont déjà dans un tableau.
 
Le code est le suivant :  
 

Code :
  1. <?php
  2.         //Chargement de la class Catégories
  3.        zend_loader::LoadClass('Categories', FOLDER_PATH . 'application/models');
  4.        //Intance de la class
  5.  $ListeCat = new Categories();
  6.  //Récupère la liste de toutes les catégories
  7.  $arrayisteCat = $ListeCat->ListeCat('logiciel');   
  8.      
  9.        //Initialisation
  10.         $categories = array();
  11.      
  12.        //Instance du modèl Catégories
  13.        $ListeSousCat = new Categories();
  14.    
  15.      //Parcour des catégories
  16.     foreach($arrayisteCat AS $category)
  17.     {
  18.    
  19.         if (!isset($categories[$category['nom_cat']]))
  20.         {
  21.          $categories[$category['nom_cat']] = array();
  22.         }
  23.         //Récupère les sous catégorie grace à l'ID
  24.         $result2 = $ListeSousCat->CatById($category['id']);
  25.        
  26.         //Parcour...
  27.         foreach($result2 AS $sousCat)
  28.         {
  29.          $categories[$category['nom_cat']][] = $sousCat['nom_cat'];
  30.         }
  31.         }
  32.        
  33.         print_r($categories);
  34.        
  35.        
  36.        //Création d'un élément select
  37.        $select = new Zend_Form_Element_Select('select');
  38.  /* Tableau à obtenir
  39.         $array = array('couleur' => array('bleu', 'blanc', 'rouge'),
  40.                        'forme'   => array('rond', 'carre', 'croix'));
  41.                        
  42.         */
  43.        
  44.    
  45.      
  46.       //Liste des catégories / sous catégories
  47.       $select->setMultiOptions($categories);
  48. ?>


 
 
 
J'obtiens un tableau de cette forme :
 

Code :
  1. Array ( [Burautique] => Array ( ) [Editeur de texte] => Array ( ) [Internet] => Array ( ) [Navigateurs] => Array ( ) )


 
Le code est super, cependant il y a une chose étrange, c'est que les sous-catégories ont des array(), et du coup sous zend, les sous-catégories sont compté comme des catégories  :sweat:  
 
Un moyen pour enlever cette array ?
 
Sinan Merci Tirkyth, on y est presque  :hello:
 
 
EDIT: En fait, je pense que ça fonctionne, je fais quelques tests et je confirme !  :)


Message édité par moreno911 le 03-03-2010 à 19:42:36

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

  Remplir un tableau à plusieurs dimensions

 

Sujets relatifs
Struts accéder à un tableau avec bean:write[RESOLU]Afficher le plus grand ID de plusieurs sous_id
tableau html avec les servletProblème avec un tableau
[Résolu] Faire plusieurs requetes mysql en meme tempsRemplir un tableau à partir d'un fichier
liste chainée et tableau dynamiqueAide Tableau Java
afficher plusieurs éléments en une seule boucle 
Plus de sujets relatifs à : Remplir un tableau à plusieurs dimensions


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