【问题标题】:Get subcategory and subsubcategory and infinite subsubsubcategory获取子类别和子子类别和无限子子类别
【发布时间】:2019-11-02 23:21:38
【问题描述】:

我正在尝试循环一个函数,该函数将所有子类别...从一个主要类别放入一个表并放入数组中。

示例表:

ID   | ParentID
1    | 0
2    | 1
3    | 1
4    | 2
5    | 4
6    | 3
7    | 1

(子类别有 parentID)

现在函数 PHP 中的示例采用主类别 (ID=1) 的所有子类别

    var_dump(getSubCategories(1));

    function getSubCategories($parent_id = 0, $subcategories = array())
    {
        global $db;

        $query = $db->query("
SELECT ID 
  FROM categories
 WHERE ParentID = $parent_id 
 ORDER 
    BY Name ASC
");

        while ($row = $query->fetch_assoc()) {
            $subcategories = getSubCategories($row['ID'], $subcategories);
        }
        return $subcategories;
    }

问题是将 ID 放在一个数组中,因为上面的代码打印了这个结果:

array(0) { }

我注意到的一件事是,如果我在下面添加这一行:

echo $row['ID'] . ',';

它正确打印结果,但不是作为数组:

2,3,4,5,6,7

我的期望是这样的,例如:array(1, 2, 3, 4, 5, 6, 7) 等...而不是多维的。

【问题讨论】:

标签: php mysql hierarchical-data


【解决方案1】:

你应该传递$subcategories参数by reference

    $subCategories = array();
    getSubCategories(1, $subCategories);
    var_dump($subCategories);
    function getSubCategories(&$subCategories, $parent_id = 0)
    {
        global $db;

        $query = $db->query("
SELECT ID 
  FROM categories
 WHERE ParentID = $parent_id 
 ORDER 
    BY Name ASC
");
        while ($row = $query->fetch_assoc()) {
            getSubCategories($subCategories, $row['ID']);
        }
    }

或者只是将结果附加到$subcategories 变量。

    var_dump(getSubCategories(1));
    function getSubCategories($parent_id = 0)
    {
        global $db;

        $query = $db->query("
SELECT ID 
  FROM categories
 WHERE ParentID = $parent_id 
 ORDER 
    BY Name ASC
");
        $subcategories = array();
        while ($row = $query->fetch_assoc()) {
            $subcategories = array_merge($subcategories, getSubCategories($row['ID']));
        }
        return $subcategories;
    }

【讨论】:

    【解决方案2】:

    您的问题是您不断覆盖$subcategories 而不是添加它。此外,您需要将当前的$row['ID'] 值添加到数组中。您需要更改此行:

    $subcategories = getSubCategories($row['ID'], $subcategories);
    

    $subcategories = array_merge($subcategories, array($row['ID']), getSubCategories($row['ID']);
    

    【讨论】:

    • 添加 $subcategories[] = $row['ID'];在 array_merge 内部和之前完美运行,谢谢。
    • @Slinidy 哎呀!我的意思是向array_merge 添加第三个参数。请参阅我的编辑以在一行中完成。
    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 2011-07-30
    • 2019-01-17
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多