PHP 和 MySQL 中的类别层次结构
在典型的数据库结构中,类别以分层方式组织,父类别包含子类别。从 MySQL 数据库检索此层次结构可能是一项具有挑战性的任务。本文探讨如何使用 PHP 和 MySQL 有效构建类别层次结构。
邻接列表模型
邻接列表模型通过将父子关系存储在一张桌子。表中的每一行都包含类别的 ID 及其父类别的 ID。该模型允许使用单个 SQL 查询高效检索类别树。
生成层次结构
要生成类别层次结构,我们使用以下 PHP 代码:
<code class="php">$refs = array(); $list = array(); $sql = "SELECT item_id, parent_id, name FROM items ORDER BY name"; $result = $pdo->query($sql); foreach ($result as $row) { $ref = &$refs[$row['item_id']]; $ref['parent_id'] = $row['parent_id']; $ref['name'] = $row['name']; if ($row['parent_id'] == 0) { $list[$row['item_id']] = &$ref; } else { $refs[$row['parent_id']]['children'][$row['item_id']] = &$ref; } }</code>
此代码迭代结果集,创建对数组中每个类别的引用。它使用父子关系构建表示层次结构的多维数组。
创建输出列表
为了显示层次结构,我们使用递归函数:
<code class="php">function toUL(array $array) { $html = '<ul>' . PHP_EOL; foreach ($array as $value) { $html .= '<li>' . $value['name']; if (!empty($value['children'])) { $html .= toUL($value['children']); } $html .= '</li>' . PHP_EOL; } $html .= '</ul>' . PHP_EOL; return $html; }</code>
此函数采用多维数组并生成表示类别层次结构的 HTML 无序列表。它递归地遍历层次结构,根据需要创建嵌套列表。
以上是如何在 PHP 和 MySQL 中构建类别层次结构?的详细内容。更多信息请关注PHP中文网其他相关文章!