Bonjour à tous, j'espère tout d'abord poster au bon endroit ;
J'ai bien utilisé la fonction de recherche avant, et trouvé une question presque similaire à la mienne, mais le résultat ne me convenait pas (requête dans une boucle, berk.)
Voilà mon soucis :
J'extrais d'une base les informations sur des forums (ID, titre, etc.).
Chaque forum possède un champ 'parent_forum_id', qui peut avoir une valeur NULL. Si NULL, alors le forum est en première ligne, sans parent. Sinon, c'est le sous-forum du parent précisé.
Du coup, je me retrouve avec un résultat ligne par ligne de forums / sous-forums, et je dois refaire l'arbre ; le but est de refaire cet arbre sous forme d'Array, qui pourra être exploité ultérieurement..
Voici mon script à l'heure actuelle, qui permet d'avoir dans l'array :
Les catégories et leurs infos, plus un champ 'children', qui contient NULL par défaut, puis qui contient les array des forums qu'il contient, avec leurs infos, plus un champ 'children', etc.
J'arrive à créer l'Array avec les catégories, puis à y insérer les Forums sans parents, puis à insérer par le biais d'une fonction les premiers sous-forums ; mais impossible, pour mon pauvre esprit, de concevoir la fonction en mode récursif pour continuer dans la "généalogie"..
Je comprends bien le concept d'une fonction récursive, mais juste, mes syntaxes finissent par planter (des erreurs d'index inexistants, ou encore de mémoire dépassée)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 <?php require('conf/conf.inc.php'); $categories = $c->get("SELECT * FROM categories"); $for_parents = $c->get("SELECT * FROM forums WHERE parent_forum_id IS NULL"); $for_children = $c->get("SELECT * FROM forums WHERE parent_forum_id IS NOT NULL"); $site = array(); $enfants = array(); foreach($categories as $cat){ $site[$cat['cat_id']] = $cat; $site[$cat['cat_id']]['children'] = NULL; } foreach($for_parents as $forum){ $site[$forum['cat_id']]['children'][$forum['forum_id']] = $forum; $site[$forum['cat_id']]['children'][$forum['forum_id']]['children'] = NULL; } foreach($for_children as $forum){ $enfants[$forum['forum_id']] = $forum; } function addEnfants($parents, $enfants){ foreach($parents as $key=>&$parent){ foreach($enfants as &$enf){ if($enf['parent_forum_id'] == $key){ $parent['children'][$enf['forum_id']] = $enf; $parent['children'][$enf['forum_id']]['children'] = NULL; // ICI, je suis censé placer un "unset" pour vider petit à petit l'array des enfants, puis relancer la fonction "addEnfant()". C'est à cette ligne que je bloque... } } } return $parents; } foreach($site as &$parents){ $parents = addEnfants($parents['children'], $for_children); } unset($parents); echo '<pre>'; var_dump($site); echo '</pre>'; echo '<br />--------------<br />'; ?>
Si quelqu'un a une idée pour me décoincerMerci !
Partager