Affichage sous catégories

Fermé
delvauxo Messages postés 2 Date d'inscription lundi 15 février 2016 Statut Membre Dernière intervention 16 février 2016 - 15 févr. 2016 à 19:45
delvauxo Messages postés 2 Date d'inscription lundi 15 février 2016 Statut Membre Dernière intervention 16 février 2016 - 16 févr. 2016 à 10:04
Bonjour,


Je cherche à réaliser un menu catégories avec un niveau de sous-catégories.
J'utilise une fonction récursive...

Voici le résultat de mon tableau ($catzo) qui contient les informations de mes catégories :

Array
(
[0] => stdClass Object
(
[id] => 1
[name] => Aucune
[slug] => aucune
[category] => non
[date] =>
[parent_id] => 0
)

[1] => stdClass Object
(
[id] => 12
[name] => Incontinence
[slug] => incontinence
[category] => oui
[date] =>
[parent_id] => 0
)

[2] => stdClass Object
(
[id] => 17
[name] => Bandagisterie
[slug] => bandagisterie
[category] => oui
[date] =>
[parent_id] => 0
)

[3] => stdClass Object
(
[id] => 21
[name] => Confort
[slug] => confort
[category] => oui
[date] =>
[parent_id] => 0
)

[4] => stdClass Object
(
[id] => 22
[name] => Vie quotidienne
[slug] => vie-quotidienne
[category] => oui
[date] =>
[parent_id] => 0
)

[5] => stdClass Object
(
[id] => 23
[name] => Equipement medical
[slug] => equipement-medical
[category] => oui
[date] =>
[parent_id] => 0
)

[6] => stdClass Object
(
[id] => 24
[name] => Bas de compression
[slug] => bas-de-compression
[category] => oui
[date] =>
[parent_id] => 0
)

[7] => stdClass Object
(
[id] => 25
[name] => Sport et bien etre
[slug] => sport-et-bien-etre
[category] => oui
[date] =>
[parent_id] => 0
)

[8] => stdClass Object
(
[id] => 26
[name] => Mobilite
[slug] => mobilite
[category] => oui
[date] =>
[parent_id] => 0
)

[9] => stdClass Object
(
[id] => 27
[name] => Salle de bain
[slug] => salle-de-bain
[category] => oui
[date] =>
[parent_id] => 0
)

[10] => stdClass Object
(
[id] => 29
[name] => ORL
[slug] => orl
[category] => oui
[date] =>
[parent_id] => 0
)

[11] => stdClass Object
(
[id] => 34
[name] => cou
[slug] => cou
[category] => oui
[date] =>
[parent_id] => 17
)

[12] => stdClass Object
(
[id] => 33
[name] => Dos
[slug] => dos
[category] => oui
[date] =>
[parent_id] => 17
)

[13] => stdClass Object
(
[id] => 35
[name] => epaule
[slug] => epaule
[category] => oui
[date] =>
[parent_id] => 17
)

[14] => stdClass Object
(
[id] => 36
[name] => Poignet et main
[slug] => poignet-et-main
[category] => oui
[date] =>
[parent_id] => 17
)

)



Voici le résultat de mon second tableau que j'obtiens à l'aide de ma fonction récursive : ($end_array)

Ce tableau est pour ma part correct car quand je change le parent id de n'importe quelle catégorie au hasard, il me la classe correctement !

Cependant je n'arrive pas à afficher le nom de mes catégories de manière identique !


Array
(
[0] => Array
(
[0] => 1
[1] => 12
[17] => Array
(
[0] => 34
[1] => 33
[2] => 35
[3] => 36
)

[18] => 21
[19] => 22
[20] => 23
[21] => 24
[22] => 25
[23] => 26
[24] => 27
[25] => 29
)

)



je voudrais afficher mes catégories avec comme libellé $catzo[$key]->name.

mais je voudrais l'architecture de mon second tableau qui classe mes sous catégories au bon endroit dans mon arbre à l'aide des catégories parents.

Cela paraissait si simple et je me rends compte que je ne m'en sors pas du tout...




2 réponses

jordane45 Messages postés 38389 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 janvier 2025 4 729
16 févr. 2016 à 00:34
Bonjour,


Cependant je n'arrive pas à afficher le nom de mes catégories de manière identique !

En même temps.. quand on regarde ton second array .. on n'y trouve aucun "libellé" .

Il faudrait que tu nous montres le code de ta fonction récursive ....


0
delvauxo Messages postés 2 Date d'inscription lundi 15 février 2016 Statut Membre Dernière intervention 16 février 2016
Modifié par delvauxo le 16/02/2016 à 10:10
Hello jordane,

Effectivement il n'y a aucun libellé et c'est bien là qu'il est mon problème xD !

voici le code de ma fonction récursive :

<?php 

 

 $initialArray = array();

 foreach ($catzo as $key => $value) {
  # code...
  $initialArray[$value->id] = $value->parent_id;

  
 }

// RESULTAT DE MON TABLEAU ($initialArray)
//
// $initialArray = array(
//
//  # cat_id => parent_id
//
//     '1' => 0,
//     '12' => 0,
//     '17' => 0,
//     '21' => 0,
//     '22' => 0,
//     '23' => 0,
//     '24' => 0,
//     '25' => 0,
//     '26' => 0,
//     '27' => 0,
//     '29' => 0,
//     '34' => 17,
//     '33' => 17,
//     '35' => 17,
//     '36' => 17,
//
// );

 // resituate the array
 $parent_ids = array();
 foreach ($initialArray as $category_id => $parent_id) {
     if (!isSet($parent_ids[$parent_id])) {
         $parent_ids[$parent_id] = array();
     }
     $parent_ids[$parent_id][] = $category_id;
 }

 // end_array is the result
 $end_array = array();

 /**
  * Takes the key of the parent, the current set that it's working off of, the list of parent ids for reference
  * and the current place in the end result array, acting recursively
  */
 function recursive($parent_key, $current_set, $parent_ids, $end_array) {
     foreach ($current_set as $parent_value) {
         if (!isSet($parent_ids[$parent_value])) {
             $end_array[$parent_key][] = $parent_value;
         } else {
             // if the parent_value is found in parent_ids, pass those values to the same function and the current end_array position
             $end_array[$parent_key] = recursive($parent_value, $parent_ids[$parent_value], $parent_ids, $end_array[$parent_key]);
         }
     }
     return $end_array;
 }
 // start with the top most element
 $end_array = recursive(key($parent_ids), current($parent_ids), $parent_ids, $end_array);

 print '<pre>'.
     //print_r($parent_ids, true).
     print_r($end_array,true).
     '</pre>'
 ;

?>
0