当前位置: 首页 > 知识库问答 >
问题:

从子类别中查找子类别的子类别

贾飞鸿
2023-03-14

我目前有一个代码片段,其中对于每个类别,它将找到子类别:

   $categories = array_map(
        function($child)
        {
            $child['children'] =
                $this->getChildren(
                    $child['id'],
                    !empty($this->request->get['language_id']) ?
                        $this->request->get['language_id'] : 1
                );
            return $child;
        }, $categories);

getChildren()将递归获取一个类别的子级:

private function getChildren($parent_id, $language_id) {
    $this->load->model('official/category');

    $children = 
        $this->model_official_category->getCategoriesByParentId(
            $parent_id,
            $language_id
        );

    // For each child, find the children.
    foreach ($children as $child) {
        $child['children'] = $this->getChildren(
            $child['id'],
            $language_id
        );
    }

    return $children;
}

目前,使用数组中的my lambda函数\u map(),只检索子类别的子类别,因此如果每个子类别都有自己的子类别,则不会将其保存到子类别中。

我如何显示子子类别给我们的子类别?

我想用我的代码做的是获取一个父级,获取它的子级,然后将这些子级中的每一个视为父级,递归地获取它的子级,但是我的JSON输出并没有反映这一点。只有父对象有子对象-子对象没有子对象(尽管我的数据库中有子对象)。

共有1个答案

梁丘翔
2023-03-14

问题是递归foreach循环将它检索的子对象分配给子数据的副本,而不是子数据本身。

要解决此问题,可以使用引用子数据的foreach循环,如下所示:

foreach ($children as &$child) {

但是,由于与PHP内部如何实现foreach相关的许多原因(如果您感兴趣,请提供更多信息),使用for循环将大大提高内存效率,因为这将避免大量子数据的写时拷贝:

for ($i = 0; isset($children[$i]); $i++) {
    $children[$i]['children'] = $this->getChildren(
        $children[$i]['id'],
        $language_id
    );
}

在这种情况下,使用对象而不是数组来表示子数据可能是一个好主意,因为对象总是通过引用(某种形式)传递,并且行为更像您最初期望的那样。

 类似资料:
  • 我正试图通过WoodPress主题中的一个函数从woocommerce获取产品类别,我已经做到了: 这将按层次列出所有顶级类别及其下的子类别,但我有子类别(子类别)的子类别,因此如何列出这些子类别。

  • 我有一个数据库是由某人为一项开发而创建的。在那个数据库中,我有一个这样的表。这是一个模式,如果parentID为0,则这些是超级类别。 1个 2. 3. 4个 5. 6. 当我浏览这个网站的时候,我可以得到一个- “AAA”的直接上级为“AA”,而“AA”的直接上级为“A”。因此,乍一看,“AAA”的超级类别是“a”。我想获得任何子类别的超级类别(父类别为“0”)。此子类别流可以是无限的。如果有人

  • 有一个类别,具有以下(重要)属性: 我正在尝试实现类别/子类别的概念。一个类别可以有零个或多个子类别。一个类别只能有一个父类别(可以为null)。对于顶级类别,parentCategory=null。 现在,我有一个所有类别的列表,

  • 我已经为产品创建了一些自定义类别,它有子类别,子类别还有更多的子类别。现在我首先显示主要类别。如果我在那里显示子类别,那么将显示与该类别及其子类别相关的所有子类别。我想一步一步地向他们展示。也就是说,如果用户单击主类别,则会转到其子类别页面。如果用户单击其子类别之一,则应转到子类别,如果没有子类别,则显示产品。这是什么代码 它覆盖了以前的排序顺序。也就是说,如果从仪表板中,我们按排序顺序给出2到3

  • 我试图在Woocommerce的当前子类别下显示子类别,比如这个网站。 我有2个家长类别“产品”和“部门”。然后我有一个菜单链接,可以同时访问两者。 当我在“产品”中时,我想看到子类别的图片,类别的标题,然后是所有子类别的标题和链接。 例如,父类别是“产品”,施工是子类别,密封剂 密封胶 这里有一个屏幕截图可以更好地解释它:

  • 我发现了一个WooCommerce代码片段,它在分类页面上添加了排序功能,并且可以正常工作。 但问题是排序子类别仅显示在父类别页面上,而不显示在子类别页面中。 为了实现这一点,我需要在代码中修改什么? 这是我的密码: 参考:在单独的列表中显示商业类别、子类别和产品