PHP/MySQL 中的类别层次结构
在 PHP/MySQL 中,使用分层结构存储类别和子类别是非常高效的邻接表模型。为了有效地检索这种分层数据,我们可以采用一种只需要一次数据库传递的方法。
一次性数据检索算法
让我们创建一个 $refs 数组并一个 $list 数组,类似于所提供的答案中提供的内容。
<code class="php">$refs = []; $list = []; $sql = "SELECT category_id, parent_id, name FROM categories ORDER BY name"; $result = $pdo->query($sql); foreach ($result as $row) { $ref = &$refs[$row['category_id']]; $ref['parent_id'] = $row['parent_id']; $ref['name'] = $row['name']; if ($row['parent_id'] == 0) { $list[$row['category_id']] = &$ref; } else { $refs[$row['parent_id']]['children'][$row['category_id']] = &$ref; } }</code>
该算法有效地构建了分层数据结构。 $refs 数组保存对所有类别的引用,$list 数组包含对顶级类别(没有父类别的类别)的引用。
递归列表生成
要将分层结构输出为 HTML 列表,可以使用如下递归函数:
<code class="php">function toUL(array $array) { $html = '<ul>'; foreach ($array as $value) { $html .= '<li>' . $value['name']; if (!empty($value['children'])) { $html .= toUL($value['children']); } $html .= '</li>'; } $html .= '</ul>'; return $html; }</code>
此函数递归地构建 HTML 列表,有效地表示从数据库获取的分层数据。
以上是如何仅通过一次数据库检索 PHP/MySQL 中的分层类别数据?的详细内容。更多信息请关注PHP中文网其他相关文章!