我正在尝试循环一个将所有子类别从一个主类别带入一个表并放入数组的函数。
示例表:
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)
等。而不是多维的。
答案 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