Webアプリケーション開発では、製品分類、記事分類、許可メニューなど、マルチレベルの分類ディスプレイのニーズが非常に一般的です。任意のレベルでのネストをサポートする構造としての無限レベルの分類は、そのようなニーズを達成するための理想的なソリューションです。この記事では、PHPを使用して効率的な無限レベルの分類ツリー構造を構築する方法を詳細に紹介します。
無限レベルの分類を実現するには、合理的なデータテーブル構造が最初に必要です。通常、単純な自己関連テーブルを使用して、分類されたデータを保存します。
CREATE TABLE categories (
id INT PRIMARY KEY AUTO_INCREMENT,
parent_id INT NOT NULL,
name VARCHAR(50) NOT NULL
);
テーブルでは、 IDは各カテゴリの一意の識別子であり、 parent_idは親クラスを表し、トップレベルのクラスの親は通常0に設定され、名前はカテゴリ名です。
ツリー構造を表示する前に、最初にデータベースから完全な分類データを抽出し、ネストされた関係を再帰的に生成する必要があります。
function getCategories($parent_id = 0) {
$categories = [];
$query = "SELECT id, name FROM categories WHERE parent_id = :parent_id";
$stmt = $pdo->prepare($query);
$stmt->execute(['parent_id' => $parent_id]);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$categories[$row['id']] = [
'id' => $row['id'],
'name' => $row['name'],
'children' => getCategories($row['id'])
];
}
return $categories;
}
上記のコードは、完全な分類ツリーを再帰的に作成し、各分類にはすべてのサブカテゴリに関する情報が含まれています。
コール例:
$categories = getCategories();
Webページに分類されたデータを明確に表示するには、HTMLの順序付けられていないリスト要素を使用して、再帰的にレンダリングできます。
function renderCategories($categories) {
echo '<ul>';
foreach ($categories as $category) {
echo '<li>' . $category['name'] . '</li>';
if (!empty($category['children'])) {
echo '<ul>';
renderCategories($category['children']);
echo '</ul>';
}
}
echo '</ul>';
}
renderCategories($categories);
この関数は、再帰的な方法を介してネストされた分類層をレイヤーごとに拡張し、クリア階層構造を使用してHTML形式で表示します。
PHPを使用して無限レベルの分類ツリー構造を実装するコアは、再帰処理とデータの合理的な表示にあります。この方法は、コンテンツ管理システムであろうと製品分類であろうと、非常に実用的です。この記事の説明が、無限の分類の実装方法をよりよく理解し、適用するのに役立つことを願っています。