インターネットの急速な発展に伴い、Web サイトの機能と要件はますます複雑になっています。その中でも無限分類機能は情報を整理・管理する上で非常に重要な手段です。開発者が情報を効果的に整理し、ユーザーが必要なものをより迅速に見つけられるようにするのに役立ちます。今回はPHP開発における無制限分類機能の使い方を紹介します。
無制限の分類機能とは
従来の分類では、各分類は 1 つの親分類と複数の子分類のみを持つことができます。ただし、一部の複雑なシナリオでは、この分類方法は制限されます。たとえば、製品は複数のブランド、複数の分類グループ、複数の地域などに属する場合があります。現時点では、無制限の分類機能により、より良いソリューションが提供されます。
無制限分類機能は、その名の通りレベル制限がなく、分類を自由に組み合わせることができ、一つのデータが複数の分類に属することも可能です。この機能は、ブログ分類、商品分類、ニュース分類など、データを柔軟に整理する必要があるシナリオに適しています。
無制限分類機能の実装方法
以下では、PHP開発で無制限分類機能を実装する方法をステップバイステップで紹介します。
ステップ 1: データベース テーブルを作成する
データベース テーブルを作成するときは、分類 ID、分類名、分類の親 ID という 3 つのキー フィールドを考慮する必要があります。カテゴリ ID は各カテゴリの一意の識別子であり、カテゴリ名はカテゴリ情報を表示するために使用され、カテゴリ親 ID はカテゴリの親カテゴリ ID を示します。
CREATE TABLE categories
(
id
int(11) NOT NULL,
name
varchar(100) NOT NULL,
parent_id
int(11) NOT NULL,
PRIMARY KEY (id
)
);
ステップ 2: 機密データを挿入
カテゴリ データをデータベース テーブルに挿入する場合、ネストされたセット モデルを使用できます。つまり、左右の値を使用して各カテゴリ レベルの組織関係を記述します。例は次のとおりです:
INSERT INTO categories
(id
, name
, parent_id
, lft
, rgt
) VALUES
(1 , '電化製品', 0, 1, 10),
(2, 'テレビ', 1, 2, 3),
(3, '携帯電化製品', 1, 4, 9),
(4, 'スマートフォン', 3, 5, 6),
(5, 'フィーチャーフォン', 3, 7, 8);
このうち、lft および rgt は、カテゴリ間の違いを説明します。階層関係の場合、サブカテゴリと親カテゴリを再帰的にクエリできます。
ステップ 3: 機密データをクエリする
機密データをクエリするときは、再帰クエリを使用できます。例は次のとおりです:
function getCategories($parentId = 0 , $ level = 0)
{
$sql = 'SELECT * FROM `categories` WHERE `parent_id` = ? ORDER BY `lft` ASC'; $stmt = $pdo->prepare($sql); $stmt->execute([$parentId]); $categories = $stmt->fetchAll(PDO::FETCH_ASSOC); if (!empty($categories)) { $level++; $categories = array_map(function ($category) use ($level) { $category['level'] = $level; $category['children'] = getCategories($category['id'], $level); return $category; }, $categories); } return $categories;
}
この関数では、まず現在の親カテゴリの下にあるすべてのサブカテゴリをクエリし、左辺値で並べ替えます。次に、それ自体を再帰的に呼び出すことによって、サブカテゴリのサブカテゴリがクエリされ、children フィールドに保存されます。最後に、カテゴリカル配列が返されます。
ステップ 4: 機密データを表示する
機密データを表示するときは、再帰的走査を使用できます。例は次のとおりです:
function showCategories($categories)
{
if (!empty($categories)) { echo '<ul>'; foreach ($categories as $category) { echo '<li>' . $category['name'] . '</li>'; if (!empty($category['children'])) { showCategories($category['children']); } } echo '</ul>'; }
}
この関数では、まずカテゴリ配列が空かどうかを判断します。空でない場合は、配列を走査してカテゴリ名を表示します。次に、カテゴリにサブカテゴリがある場合は、それ自体を再帰的に呼び出してサブカテゴリを表示します。
結論
上記の 4 つの手順により、無制限の分類関数を簡単に実装でき、再帰的手法を使用して分類されたデータを表示することもできます。この関数は、実際の開発、特に電子商取引、ニュース、ブログ、その他のシナリオで非常に一般的です。この記事が PHP 開発者にインスピレーションを与え、実際の開発ニーズにうまく対処できるようになれば幸いです。
以上がPHP開発で無制限の分類機能を使う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。