Я использую Вложенный набор Модель отсюда : 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);
Большое спасибо за Вашу помощь!
Вы должны быть в состоянии остановить рекурсивный цикл, когда достигнете «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);
Других решений пока нет …