現在の位置: ホーム> 最新記事一覧> 木型の無限分類構造の実装に関する完全なチュートリアル

木型の無限分類構造の実装に関する完全なチュートリアル

gitbox 2025-07-28

導入

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を使用して無限レベルの分類ツリー構造を実装するコアは、再帰処理とデータの合理的な表示にあります。この方法は、コンテンツ管理システムであろうと製品分類であろうと、非常に実用的です。この記事の説明が、無限の分類の実装方法をよりよく理解し、適用するのに役立つことを願っています。