从树构建多维数组

Build a multi dimensional array from tree

我在 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"
            }
        ]
    }
]

Here is the sample data

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;
}