Узловая ссылка Дерево и данные, заполненные PHP в файле json

Я использую Вложенный набор Модель отсюда : http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ и запрос от Глубина поддерева раздел.

Я хотел бы использовать этот график http://bl.ocks.org/mbostock/4339184 с данными из моей базы данных, но я не знаю, как разработать алгоритм в PHP для записи данных JSON.
Flare.json здесь http://bl.ocks.org/mbostock/raw/4063550/flare.json (Я не использую атрибут размера)

Я написал некоторый код, но я потерян, и я не знаю, что делать:

$subtree = array(
['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],
);

function buildTree($data) {
$tree    = [];
$current = 0;

foreach ($data as $key => $child) {
// Root
if ($key == $current) {
$tree['name'] = $child['name'];
$lastLevel    = $child['depth'];
// Child
} elseif( && $child['depth'] == ($lastLevel + 1)) {
if (!isset($tree['children'])) {
$tree['children'] = [];
}
$tree['children'][] = buildTree(array_slice($data, $key));
$current++;
}
}

return $tree;
}

$tree = buildTree($subtree);

print_r($tree);

Большое спасибо за Вашу помощь!

0

Решение

Вы должны быть в состоянии остановить рекурсивный цикл, когда достигнете «non-child», возвращая результат до сих пор.
Также вам не нужен $ current, так как в каждом рекурсивном цикле ваш массив нарезается, и первый $ key всегда равен 0:

function buildTree($data) {

$tree    = array();

foreach ($data as $key => $child) {
// Root
if ($key == 0){
$tree['name'] = $child['name'];
$lastLevel    = $child['depth'];
// Child
} else if(($child['depth'] == ($lastLevel + 1))) {
if (!isset($tree['children'])) {
$tree['children'] = array();
}
$tree['children'][] = buildTree(array_slice($data,$key));
}
else if($child['depth'] <= ($lastLevel)){
return $tree;
}
}
return $tree;
}

$tree = buildTree($subtree);

print_r($tree);
1

Другие решения

Других решений пока нет …