ホームページ  >  記事  >  バックエンド開発  >  PHP 無限分類の実装アイデアをいくつか投稿してください~_PHP チュートリアル

PHP 無限分類の実装アイデアをいくつか投稿してください~_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:58:12691ブラウズ

1. ウェブサイトを作成する人は通常、分類の処理の問題に遭遇します。無制限の分類を処理する例をいくつか投稿します。データベースの構造は非常に単純です:
id、fatcher_id、name...
このような設計です。これは短くて簡潔で、ほとんどの要件を満たします。

1 最も恐ろしい方法であるデータベースの実装を見てみましょう。これも実装する最良の方法です
カテゴリ 1
カテゴリ 1.1
カテゴリ 1.2
カテゴリ 2
データベースを返した後に一度データベースにクエリを実行します。分類 (ページめくり、クエリなど) が含まれる場合、データベースはハードディスクを悲劇的に操作します。 ... アーメン~それで~ ちょっとジャンプしてください...

2. データベースに一度クエリを実行し、再帰的に配列を生成します。 上記のディレクトリ構造

一般的なアイデアを投稿します
function SelectList(&$Data, $RootID = 0' )
{for($ i = 0; $ i< count($ data); $ i ++)if($ data [$ i] ['uid'] == $ rootid)[$ lotid)。 $ i] ['ID'], $ Blank, $ match);
}}}
Return $ This-& gt; ただし、再帰には K 個または W 個のカテゴリが必要になる場合があります。同時実行性を考慮すると... ははは、もう一度ジャンプしましょう
3. データベースに一度クエリを実行すると、ディレクトリ構造が再帰的に生成されます
このステップで、プログラムのトリックが始まります〜ディレクトリを生成できます結果を一度走査するだけで、上のような構造をWebページの表示形式に整形したい場合に非常に便利です~ 以下は他の人が書いたものです たまに実現可能 过Function Getarray ($ Rootid = 0) {
$ data = 配列 ();

$ データ = $ tblobj- & gt; 出力 = Array();
$len = Count( $Data);
if($RootID)
{
while($Data[$i]['UID'] != $RootID && $ i $UpID = $RootID; //前のノードが指すカテゴリの親 ID
for($cnt = Count($Data); $i {
$j = 0;この分類に基づくサブカテゴリのデータは、if($ upid == $ rootid)//すべての最初のレベルのカテゴリをこの配列の最初のループに$ outputに保存します出力アレイへのノード$ tmp [$ i] ['id'] =&$ output [$ j];
] ['child'] [$ j] = $ data [$ i]; $j | = $Data[$i]['UID']
を返します
}

プログラムはとても疲れそうです~このコードの効率は前のコードより10倍以上速く、強度は十分に強いです...
しかし...このコードを使用しているWebサイトの90%は無駄です~Webサイト私が遭遇した分類は一般的にレベル 4 未満です。それで、さらに最適化することはできますか?...もう一度ジャンプしましょう...
4. データベースから始めましょう~
データベースの構造を少し変更し、レイヤーの冗長フィールドを追加しました。これは DB 設計の専門家によって考えられたものです。
ID 名 Father_id レイヤー
1 合計カテゴリ 0 000000
2 カテゴリ 1 1 010000
3 カテゴリ 1.1。 2 010100 04 カテゴリ 1.2 2 010200
5 カテゴリ 2 1 020000
カテゴリ 2.1 5020100
7 カテゴリ 3 1 030000
8 カテゴリ 3.1 7 030100
9 カテゴリ 3.2 7
10
3 010101

今すぐサイズに応じて検索してくださいlayer: SELECT * FROM Type_table_2 ORDER BY type_layer

レコードセットは次のようにリストされます:

id ‐オフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフオフ � � � � 000
2 カテゴリ 1 1 010000
3 カテゴリ 1.1 2 010100
10 カテゴリ 1.1.1 3 010101
4 カテゴリ 2 1 0200 00
6 カテゴリ 2.1 020100
7 カテゴリ 3 1 030000
8 カテゴリ 3.1 7 030100ディレクトリ構造は生成されているため、BT がある場合、このルーチンのレイヤー フィールドの各レベルで処理できる作業がさらに簡単になります。アプリケーションを大きくしてください。笑、まずニーズを分析しましょう

OK~OVER~SHANGREN~

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/317650.html技術記事 1. ウェブサイトビルダーは通常、分類を処理するという問題に遭遇します。私は、無制限の分類を処理するいくつかの例を時々投稿します。データベースの構造は非常に単純です: id、fatcher_id、name... このような設計は短くて簡潔です。 .
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。