Remplir un tableau à plusieurs dimensions

Remplir un tableau à plusieurs dimensions - PHP - Programmation

Marsh Posté le 03-03-2010 à 16:29:03    

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

Reply

Marsh Posté le 03-03-2010 à 16:29:03   

Reply

Marsh Posté le 03-03-2010 à 17:41:57    

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.

Reply

Marsh Posté le 03-03-2010 à 19:27:55    

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
Reply

Sujets relatifs:

Leave a Replay

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