递归如何获取无限极分类?

发布于 2022-09-12 13:26:30 字数 1202 浏览 50 评论 0

有一张分类表,如何使返回的结果是无限极children?recursiveData方法哪里有问题?谢谢。
show()方法返回结果是:
image.png

public function show()
    {
        $data = $this->getData(0);
        $res = $this->recursiveData($data);
        echo json_encode($res);
    }

    public function recursiveData($data)
    {
        if (empty($data)) {
            return false;
        }

        $children = [];
        foreach ($data as $dk => $dv) {
            $children = $this->getData($dv['id']);
            $data[$dk]['children'] = $children;
            $this->recursiveData($children);
        }
        return $data;
    }

    /**
     * Get data from database.
     * @return array
     **/
    public function getData($parent_id)
    {
        $tmp  = [];
        $data = DB::select('select id,title from category where parent_id<99 and parent_id = ?', [$parent_id]);
        foreach ($data as $dk => $dv) {
            $tmp[] = [
                'id'       => $dv->id,
                'title'    => $dv->title,
                'parentId' => $parent_id,
            ];
        }
        return $tmp;
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

四叶草在未来唯美盛开 2022-09-19 13:26:30

可以考虑把数据一次性都拿出来,然后在递归组装

public function _tagTree($data, $maxLev, $parentId = 0, $level = 1)
{
    $tree = [];
    foreach ($data as $key => $val) {
        if($val['parent_id'] == $parentId && $level <= $maxLev) {
            $_val = $val;
            
            //减少无效循环
 unset($data[$key]);
            $_val['child'] = $this->tagTree($data, $maxLev, $val['tag_id'], $level + 1);
            $tree[] = $_val;
        }
    }
    return $tree;
}
情感失落者 2022-09-19 13:26:30
$data[$dk]['children'] = $children;
$this->recursiveData($children);

改成

$data[$dk]['children'] = $this->recursiveData($children); 
我做我的改变 2022-09-19 13:26:30

不要在循环里面嵌套sql查询

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文