获取子类别和子子类别以及无限子子子类别
Get subcategory and subsubcategory and infinite subsubsubcategory
我正在尝试循环一个函数,该函数将所有子类别..从一个主要类别转换为一个 table 并放入数组中。
示例table:
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) { }
我注意到的一件事是,如果我在下面添加这一行 while:
echo $row['ID'] . ',';
它正确地打印了结果,但不是作为数组:
2,3,4,5,6,7
我的期望是这样的,例如:array(1, 2, 3, 4, 5, 6, 7)
等等,而不是多维的。
你的问题是你一直在覆盖 $subcategories
而不是添加它。此外,您需要将当前的 $row['ID']
值添加到数组中。您需要更改此行:
$subcategories = getSubCategories($row['ID'], $subcategories);
到
$subcategories = array_merge($subcategories, array($row['ID']), getSubCategories($row['ID']);
你应该传递 $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;
}
我正在尝试循环一个函数,该函数将所有子类别..从一个主要类别转换为一个 table 并放入数组中。
示例table:
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) { }
我注意到的一件事是,如果我在下面添加这一行 while:
echo $row['ID'] . ',';
它正确地打印了结果,但不是作为数组:
2,3,4,5,6,7
我的期望是这样的,例如:array(1, 2, 3, 4, 5, 6, 7)
等等,而不是多维的。
你的问题是你一直在覆盖 $subcategories
而不是添加它。此外,您需要将当前的 $row['ID']
值添加到数组中。您需要更改此行:
$subcategories = getSubCategories($row['ID'], $subcategories);
到
$subcategories = array_merge($subcategories, array($row['ID']), getSubCategories($row['ID']);
你应该传递 $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;
}