ホームページ  >  記事  >  バックエンド開発  >  アクセスできません。ネットワーク リソースを使用する権限がない可能性があります。PHP で無制限の分類を実装する方法に関するアイデアを投稿してください。

アクセスできません。ネットワーク リソースを使用する権限がない可能性があります。PHP で無制限の分類を実装する方法に関するアイデアを投稿してください。

WBOY
WBOYオリジナル
2016-07-29 08:36:021094ブラウズ

1. Web サイトを作成する人は、一般的に分類の処理の問題に遭遇します。私は、無制限の分類を処理する例をいくつか投稿します。データベースの構造は非常に単純です:
id、fatcher_id、name、...
そのような設計は短いです。これは 3NF を完全に満たしています。ほとんどの要件を満たします。このデータベース構造でのプログラムの実装を見てみましょう
最もひどい方法です。最良の実装方法
カテゴリ1
カテゴリ1.1
カテゴリ1.1.1
カテゴリ1.2
カテゴリ2
カテゴリ2.1
カテゴリ3
カテゴリ3.1
カテゴリ3.2
......
このようなディレクトリ構造を生成するには、プログラムは一度データベースに再帰的にクエリを実行します (ページめくり、クエリ...) と、データベースはハードディスクを悲劇的に操作します...データベースを一度作成すると、再帰配列によって上記のディレクトリ構造が生成されます
一般的なアイデアを投稿してください
function SelectList(&$Data, $RootID = 0')
{
for($i = 0; $i < count($Data) ); $ i ++){$ data [$ i] ['uid'] = $ i] ['id']、$ blank、$ mate、 K 個または W 個のカテゴリの場合、再帰には 100 ミリ秒以上かかる場合があります。同時実行性を考慮すると... ははは、もう一度ジャンプしましょう
3. データベースを 1 回クエリして、ディレクトリ構造を非再帰的に生成します。このステップ 1 のコツは次のとおりです。プログラム〜上記のようなディレクトリ構造を生成するには、結果を一度トラバースするだけで済みます。それをWebページの表示スタイルにフォーマットするのに非常に便利です〜以下は他の人が書いたもので、私はそれを試しました。それは完全に実現可能です
function GetArray($RootID = 0)
{
$Data = array();
$Data = $tblObj->MapResult($tblObj->Select()); );
$i = 0;
$len = カウント($Data);
if($RootID)
{ while($Data[$i]['UID'] != $RootID && $i < $len ) $i++;
}
$UpID = $RootID; //前のノードが指すカテゴリの親 ID
for($cnt = Count($Data); $i {
j = 0; // 分類データの分類を初期化します
IF ($ upid == $ rootid) // 最初のサイクルですべての第 1 レベルの分類を $ OUTPUT 配列に保存します {
WHILE ( $ (($ ($ ($ ($ ($ ($ Data[$i]['UID'] == $UpID && $i /ノードを出力アレイ$ TMP [$ i] ['id'] =&$ output [$ j]; i++;
] ['child'] [$ j] = $ data [$ i]; $j | = $Data[$i]['UID']
を返します
}
プログラムはとても疲れそうです~ このコードの効率は前のコードよりも10倍以上速く、強度は十分に強いです...
しかし...このコードを使用しているWebサイトの90%は無駄です~ Webサイトの分類私が遭遇したのは通常、レベル 4 未満です。それで、さらに最適化することはできますか?... もう一度ジャンプしましょう...
4. データベースから始めましょう~
少しデータベースの構造を変更し、冗長フィールドを追加します。これは DB デザインの専門家によって考えられたもので、私が投稿したものです
id name Father_id レイヤー
1 合計カテゴリ 0 000000
2 カテゴリ 1 1 010000
3 カテゴリ 1.1 2 010100
5 カテゴリ 2 1 020000
6 カテゴリ 2.1 5020100
7 カテゴリ 3 1 030000
8 カテゴリ 3.1 7 030100
9 カテゴリ 3.2 7 030200
10 カテゴリ 1.1.1 3 010101
今すぐレイヤーを押してください。 : SELECT * FROM Type_table_2 ORDER BY type_layer
レコード セットは次のようにリストされます:
id Father_idカテゴリー 1 1 010000
3 カテゴリ 1.1 2 010100
10 カテゴリ 1.1.1 3 010101
4 カテゴリ 1.2 2 010200
5 カテゴリ 2 1 020000
6 2.1 5 020100
7カテゴリ 3 1 030000
8 カテゴリ 3.1 7 030100
9 カテゴリ 3.2 7 030200
分かりましたか? ディレクトリ構造も 1 つのクエリで生成されます。このルーチンでは、レイヤー フィールドが各レベルで 99 個のカテゴリを処理できるため、プログラムがはるかに簡単になります。 BT アプリケーションです。もっと大きくしてください。笑、まず自分のニーズを分析してください
OK~OVER~ASH人~

上記には、PHP で無制限の分類を実装するためのいくつかのアイデアが紹介されています。また、ネットワーク リソースにアクセスできない場合や、PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。