Algorithmie et récursivité
Bonsoir !
Voilà j'ai un petit problème d'algorithmie et de récursivité et je ne sais pas trop comment m'en sortir..
Je veux dessiner ce graphe : http://bl.ocks.org/mbostock/raw/4063550/ et le json correspondant est celui ci : http://bl.ocks.org/mbostock/raw/4063550/flare.json
Seul "name" et "children" m'intéressent, pas "size".
Je reçois de ma base de données un nom et la profondeur associé dans l'arbre, le tout est ordonnée correctement :
Voilà un exemple de donnée que je reçois, traduit en un tableau PHP :
j'ai bougé volontairement la valeur de "name", pour qu'on voit bien l'arbre se dessiner.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
$subtree = [
['name' => 'ELECTRONICS', 'depth' => 0],
['name' => 'TELEVISIONS', 'depth' => 1],
['name' => 'TUBE', 'depth' => 2],
['name' => 'LCD', 'depth' => 2],
['name' => 'PLASMA', 'depth' => 2],
['name' => 'PORTABLE ELECTRONICS', 'depth' => 1],
['name' => 'MP3 PLAYERS', 'depth' => 2],
['name' => 'FLASH', 'depth' => 3],
['name' => 'CD PLAYERS', 'depth' => 2],
['name' => '2 WAY RADIOS', 'depth' => 2]
]; |
J'avais donc commencé un bout de code comme ça, mais ça ne fonctionne pas comme je veux bien sur...
Code:
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
|
function buildTree($data) {
$tree = [];
$current = 0;
foreach ($data as $key => $child) {
// Root
if ($key == $current) {
$tree['name'] = $child['name'];
$lastLevel = $child['depth'];
$lastKey = $key;
// Child
} elseif(($lastKey + 1) == $key && $child['depth'] == ($lastLevel + 1)) {
//echo $key." -> " . $child['name'].": ".$child['depth']." == ".($lastLevel + 1)."\n";
if (!isset($tree['children'])) {
$tree['children'] = [];
}
$tree['children'][] = buildTree(array_slice($data, $key));
$current++;
}
}
return $tree;
}
$tree = buildTree($subtree);
print_r($tree);
//json_encode après.. |
Ce n'est sûrement pas un bon début de solution, alors s'il quelqu'un est fort en algo, un petit coup de pouce ne serait pas de refus..
Merci !