Hello,
Après avoir galéré comme pas possible, je vous partage une solution que j'ai trouvé sur le web pour afficher sous forme d'arbre les catégories et sous catégories. J'ai encore beaucoup à apprendre, notamment au niveau des fonctions sur les Arrays.
Juste une requête sql du genre "SELECT id,parent,name FROM table_category;" sans ce soucier de la relation parents enfants. j'ai trouvé ça pas mal par ce que tous les autres bouts de codes que j'ai trouvé obligeais à faire plusieurs requêtes pour avoir l’arborescence.
Voilà le code est le lien au cas où cela peut vous servir : http://codepad.org/8p9DyHUZ
$categories = array(
array('id' => 1, 'parent' => 0, 'name' => 'Category A'),
array('id' => 2, 'parent' => 0, 'name' => 'Category B'),
array('id' => 3, 'parent' => 0, 'name' => 'Category C'),
array('id' => 4, 'parent' => 0, 'name' => 'Category D'),
array('id' => 5, 'parent' => 0, 'name' => 'Category E'),
array('id' => 6, 'parent' => 2, 'name' => 'Subcategory F'),
array('id' => 7, 'parent' => 2, 'name' => 'Subcategory G'),
array('id' => 8, 'parent' => 3, 'name' => 'Subcategory H'),
array('id' => 9, 'parent' => 4, 'name' => 'Subcategory I'),
array('id' => 10, 'parent' => 9, 'name' => 'Subcategory J'),
);
function categoriesToTree(&$categories) {
$map = array(
0 => array('subcategories' => array())
);
foreach ($categories as &$category) {
$category['subcategories'] = array();
$map[$category['id']] = &$category;
}
foreach ($categories as &$category) {
$map[$category['parent']]['subcategories'][] = &$category;
}
return $map[0]['subcategories'];
}
echo "=== BEFORE ===\n";
print_r ($categories);
$tree = categoriesToTree($categories);
echo "=== AFTER ===\n";
print_r ($categories);
echo "=== TREE ===\n";
print_r ($tree);
🔴 Hors ligne