从树构建多维数组

时间:2022-12-20 21:35:38

I have some data on a MySQL database representing a tree structure, and I want to convert it into JSON. I have used a recursive function to read all the data but I have no idea on how to convert into an array.

我有一些代表树结构的MySQL数据库的数据,我想将它转换为JSON。我使用递归函数来读取所有数据,但我不知道如何转换为数组。

Here is the recursive function:

这是递归函数:

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

}

And the following is the JSON result I'd like to have in the end:

以下是我最终想要的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

这是样本数据

1 个解决方案

#1


2  

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

#1


2  

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