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中文網其他相關文章!