Построить многомерный массив из дерева

У меня есть некоторые данные в базе данных MySQL, представляющие древовидную структуру, и я хочу преобразовать их в JSON. Я использовал рекурсивную функцию для чтения всех данных, но я не знаю, как преобразовать в массив.

Вот рекурсивная функция:

public function buildTree($parent, $level) {

// retrieve all children of $parent
$results = Department::all()->where('parent_id',$parent);
// display each child

foreach($results as $result)
{

echo $this->buildTree($result['id'], $level+1);
}

}

И вот результат JSON, который я хотел бы получить в конце:

[
{
"id":1,
"text":"Root node",
"children":[
{
"id":2,
"text":"Child node 1",
"children":[
{
"id":4,
"text":"hello world",
"children":[{"id":5,"text":"hello world2"}]
}
]
},
{
"id":3,
"text":"Child node 2"}
]
}
]

Вот пример данных

0

Решение

public function buildTree($parent, $level) {
// The array which will be converted to JSON at the end.
$json_return = array();

// Get the current element's data.
$results = Department::all()->where('id',$parent);
$json_return['id'] = $parent;
$json_return['text'] = $results[0]['text']; // Or however you access the "text" parameter of the end JSON from the database.

// Retrieve all children of $parent
$results = Department::all()->where('parent_id',$parent);

if (count($results) > 0)
{
$json_return['children'] = array();
foreach($results as $result)
{
$json_return['children'][] = $this->buildTree($result['id'], $level+1);
}
}
// Going to assume that $level by default is 0
if ($level == 0)
{
echo json_encode(array($json_return));
}
return $json_return;
}
2

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

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

По вопросам рекламы [email protected]