获取子类别和子子类别以及无限子子类别

时间:2019-11-02 23:21:38

标签: php mysql hierarchical-data

我正在尝试循环一个将所有子类别从一个主类别带入一个表并放入数组的函数。

示例表:

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)等。而不是多维的。

2 个答案:

答案 0 :(得分:2)

您应该传递$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;
    }

答案 1 :(得分:1)

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

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

Row  Start_Timestamp      End_Timestamp           Data_Item
---  ---------------      --------------          ---------
1    2019-08-12_22:07:53  2019-08-12_22:09:57     100      
2    2019-08-12_22:09:57  2019-08-12_22:12:01     203      
3    2019-08-12_22:12:01  2019-08-12_22:13:03     487      
4    2019-08-12_22:13:03  2019-08-12_22:16:19     113      
5    2019-08-12_22:24:34  2019-08-12_22:26:37     632      
6    2019-08-12_22:26:37  2019-08-12_22:27:40     532      
7    2019-08-12_22:27:40  2019-08-12_22:28:42     543      
8    2019-08-12_22:28:42  2019-08-12_22:31:57     142      
9    2019-08-13_19:56:06  2019-08-13_19:57:08     351      
10   2019-08-13_19:57:08  2019-08-13_19:58:10     982      
相关问题