【问题标题】:Build a Category tree with a php recursion使用 php 递归构建类别树
【发布时间】:2014-03-20 17:16:07
【问题描述】:

我有一个 MySQL 表,其类别如下:

categoryID | categoryName  | parentID
------------------------------------
1          | books         | NULL
------------------------------------
2          | newspapers    | NULL
------------------------------------
3          | sci-fi        | 1
------------------------------------
4          | robot stories | 3
-------------------------------------
etc.

当我只有“机器人故事”的 ID 并且它必须看起来像时,我需要使用递归构建一个类别树:

书籍 -> 科幻小说 -> 机器人故事

任何建议都会有所帮助!

【问题讨论】:

  • 如果你需要帮助,你可能应该用一种语言标记它,把它放在标题中不会出现在人们的过滤器中。
  • 这是我在这里的第一个问题。谢谢!
  • 如果你使用Closure Tables,那会容易很多。

标签: php mysql recursion tree


【解决方案1】:

如果树不是太大,我会把整个东西加载到内存中(你也可以缓存它):

$tree = [];
$stmt = $db->query("SELECT * FROM categories");
while (($row = $stmt->fetch(PDO::FETCH_ASSOC)) !== false) {
    $tree[$row['categoryID']] = $row;
}

$currentCategoryId = 4;
$hierarchy = [];

// build hierarchy, working from leaf to root
while (isset($tree[$currentCategoryId])) {
    array_unshift($hierarchy, $tree[$currentCategoryId]);
    $currentCategoryId = $tree[$currentCategoryId]['parentId'];
}

print_r($hierarchy);

【讨论】:

  • 不,它不大,我正在为管理面板构建它,因此一次只有一个用户会加载此页面。我会试试这个并告诉会发生什么,谢谢
  • 无法尝试 :( 致命错误:调用未定义的方法 mysqli_result::fetch()
  • 我的回答假设您使用的是 PDO,您必须对其进行调整以匹配 mysqli。
猜你喜欢
  • 2012-03-18
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 2012-07-15
相关资源
最近更新 更多