


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