ホームページ バックエンド開発 PHPチュートリアル PHP 無制限分類プログラム コード_PHP チュートリアル

PHP 無制限分類プログラム コード_PHP チュートリアル

Jul 13, 2016 am 10:48 AM
php コード 分類 長い間 私たち データ ニュース 無制限 プログラム

無限分類 データを分類する場合、ほとんどの場合、ニュースやソフトウェア チャネルにはさまざまなサブカテゴリがある可能性がありますが、これらのサブカテゴリがわからないため、無限分類方法を使用する必要があります。

最初のカテゴリ (親カテゴリ) –> 2 番目のカテゴリ (子カテゴリ) –> 3 番目のカテゴリ (孫カテゴリ)

そのような親族分類が増えるほど、プログラムとデータベースを制御することがより複雑になり、同じレベルでの分類処理と制御は非常に簡単になります。これは、次のようなこのレベルの分類を記録するのに必要なデータベースが 1 つだけであるためです。 、ニュースやその他の分類はこのレベルでの処理が非常に簡単ですが、Web サイトの場合は、第 1 レベルの分類だけでは十分ではなく、次のように再度分類する必要があります。

システム –> Linux、Windows

ニュース – > Linux ニュース、Windows ニュース

この分類はより明確になります。少なくともシステムには Linux と Windows が含まれ、ニュースには Linux ニュースと Windows ニュースが含まれることを理解できるようになります。情報をより明確にするために、引き続き次のように分類します。

linux–>システム ツール、カーネル、プログラミング言語、開発ツール


分類が第 3 レベルになると、情報の処理がより明確になります。つまり、情報を明確に処理するには、分類が詳細であればあるほど、情報の処理が容易になります。ネチズンが明確な目的を持って必要な情報を見つけやすくなります。しかし、分類が改良され続けるにつれて、プログラムとデータベースを制御することはますます困難になります。

問題 1: データベース内のこれらの関連する血縁分類をどのように扱うか?

難易度 2: php を使用してこの明確な関係を完成させるにはどうすればよいですか?

この種のマルチレベルで詳細な分類は、すべての PHP プログラマーが解決しなければならない問題です。優れた Web サイトを作成するには分類の問題は避けられず、この問題の解決は非常に複雑であり、その中で最大の問題はデータベースの分類処理。データベースが適切に処理されないと、膨大な作業負荷が発生し、データベースの再計画も必要になるためです...

これは誇張ではありません。データベースを扱うときに、多くの人が第 1 レベルの分類を使用してデータベースを構築するためです。当時、ほとんどの Web サイトは第 3 レベルに分類されていたため、私もこの方法を採用しました。データベース 処理に必要な分類データベースは 3 つだけですが、下位の分類を続ける必要がある場合、このアプローチの欠点が明らかになります。分類が下位になるほど、ワークロードとプログラムの量が大幅に増加するためです。

今回紹介する方法は、分類データベースを使って無限下位分類法を作成する方法です。Windowsを使用したことのある読者ならご存知の通り、Windowsフォルダーには無限下位分類ディレクトリが作成でき、その下にディレクトリを作り続けることができます。 , このように延々と続きますが、Linuxのディレクトリ作成にもこの機能があります

私が紹介した方法はこの形式と同じです。

データベース計画

分類の複雑さについては先ほど説明しましたが、無制限の分類を実現するには、データベースをどのように計画するかが非常に重要なステップになります。

私はかつてフォーラムのデータベース計画について紹介しました。はい、フォーラムは無制限のフォローアップを実現できます。分類は子供と親の間の関係でもあります。このような子供と親の関係を明確にするためには、いくつかの困難があります。

1) 各カテゴリーの情報保管の扱い方;
2) 分類の親族関係にどう対処するか;

3) 情報に関するお問い合わせへの対応方法

親族関係のデータベース処理は、フォーラムのデータベース処理に似ています。ここでは、分類を処理するためのタイプ データベースを構築します。

フィールドの作成:
id(int): 各カテゴリの自然なシリアル番号を記録するために使用されます
uid(int): このカテゴリの親カテゴリの ID 番号を記録するために使用されます

type(char): カテゴリの名前

roue_id (varchar): 親族関係を示すための親族ツリー、:0:2:10:20: の ID で接続します

roue_char (varchar): アフィニティ ツリー、次のようなもの: system: linux: 開発ツール: gcc: (このフィールドが存在するかどうかは関係ありません。各アフィニティをよりわかりやすく理解するために、もちろん文字表現はより直接的です数値表現よりも^o^ですが、このフィールドを追加するのが最適です)


このような無制限のカテゴリテーブルが確立されました。次に、情報を保存するためのデータベースを確立する必要があります。テーブルを処理してクエリするのが最も便利です。そのため、情報を保存するためのテーブル type_message:

id(int): メッセージのシリアル番号;
typeid(int): カテゴリの ID 番号;
title(varchar): メッセージのタイトル;

メッセージ(テキスト): メッセージの内容;

time: 情報が作成された時刻;

これら 2 つのデータ テーブルは、無制限の分類タスクを完了できます (2 つのテーブルの補助フィールドは追加されません。読者は独自に追加できます)。
残りのタスクはphpによって処理されます

プログラム制御
このステップは、無限分類関数を実装する上で最も複雑で手間がかかるものです。まず、プログラム内で完了する必要があるステップを見てみましょう。

1) アップロード用のカテゴリを作成します;

2) アップロードする情報を作成します;

3) 各カテゴリとそれらの関係を明確に表示します。

4) プロセスクエリ関数;

5) 編集および削除機能の処理方法;


カテゴリの編集と削除には均一性の問題が含まれるため、これら 5 つのステップの中で最も難しいのは 5 番目のステップです。

以下、phpのプログラム制御を一つ一つ説明していきます

1)カテゴリーを作成してアップロード

この関数を紹介する前に、まず、explode() 関数を紹介します。これは、文字列を分解するために使用される、次のような具体的な使用法です。

「0:1:2:3:4」の数字を分解します

$val="0:1:2:3:4";
$rid=explode(":",$val);

Expand() 関数によって処理された後、$val 内のすべての数値が $rid 配列に分解されます。引用したい場合は、単に echo “$rid[0],$rid[1],$rid” と出力します。 [2]… "; 以上です。explode() 関数は、分類プロセス全体において非常に重要な役割を果たします。次に、非現行分類のプログラム制御の導入を始めましょう。

合計分類が 0 であり、すべての分類がその子孫であると仮定できます。次に、最初の分類「システム」を確立し、それがデータベースにどのように保存されるかを見てみましょう。

id | ルート ID | 1 | 0 | システム

次に、「Linux」を以下に分割しました:

id | ルート ID | 2 | 1 | システムLinux

上記はデータベース ストレージの形式です。これはフォーラム コードとよく似ています。必要なのは、カテゴリ ID を uid に入力し、親カテゴリの uid を 0 に入力することだけです。コード:


コードは次のとおりです

コードをコピー ……";
echo "";

エコー "";

エコー "

……

//デフォルトページを設定します

if (empty($func)) $func=="showtype";

//親カテゴリのuidを設定します

if (empty($uid)) $uid=0;


//データベースストレージ******************************************** *** ***

if ($func=="保存"):


$フィールド = "";

$values = "";


if ($id!="") {

$fields .= ",id";

$values.=",$id";
}

if ($uid!="") {
$fields .= ",uid";
$values.=",$uid";
}

if ($type!="") {
$fields .= ",type";
$values.=","$type"";
}

if ($route_id=="") {

//親カテゴリのroute_idを取得します
if ($uid!=0) {

$result = mysqlquery("select * from type where id=$uid");

$route_id=mysql_result($result,0,"route_id");

} その他 {

$routr_id="0";
}
$fields .= ",route_id";
//独自のroute_idを作成します
$route_id="$route_id:$id";
$values.=","$route_id"";
}

//独自のroute_charを作成します
if ($route_char!="") {
$fields .= ",route_char";
$route_char="$route_char:$type";

$values.=","$route_char"";

} その他 {
$fields .= ",route_char";
$route_char=$type;
$values.=","$route_char"";
}

$fields = substr($fields,1,strlen($fields)-1);
$values = substr($values,1,strlen($values)-1);

$result = mysqlquery("型 ($fields) 値 ($values) に挿入");

...

endif; /* 保存を終了 */

//カテゴリーアップロード******************************************** *** ***

if ($func=="createtype"):

//自分の ID を取得します

$result = mysqlquery("select * from type order by

ID の説明");
$num=mysql_numrows($result);

if (!empty($num)) {

$cat = mysql_result($result,0,"id");
} その他 {
$cat=0;
}

//分類のステータスを決定する
if ($uid != 0) {
$result=mysql_query("select * from type where id=$uid");
$type=mysql_result($result,0,"type");

$route_char=mysql_result($result,0,"route_char");

} その他 {
$type="親カテゴリ";
}
echo "

";

エコー "";
echo "
Category:$type
カテゴリの作成:
";

$cat=$cat+1;
echo "";
echo "";

echo "";

echo "

";
echo "";
エンドイフ; /* createtype の終了 */

//显示分类********************************************* ***
if ($func=="showtype"):

エコー "";

//分別状態判断
if ($uid!=0) {
$result=mysql_query("select * from type where id=$uid");
$type=mysql_result($result,0,"type");
} その他 {
$type="父分类";
}

echo "创建分类";

echo "$type";

$result=mysql_query("select * from type where uid=$uid");
$num=mysql_numrows($result);

if (!empty($num)) {
for ($i=0;$i

$id=mysql_result($result,$i,"id");
$type=mysql_result($result,$i,"type");

エコー "";
echo "$type";
echo "";
}
}

エコー "";
エンドイフ; /* ショータイプの終了 */
……
……

?>

以上の手順により、無制限の分別クラスの基本的な構築、保存、および表示が完了し、次に完全な分別クラスの構築機能の各部分が完了します。

経路跟追跡

前に分別の構築方法を説明しましたが、分別テーブルに rout_id と rout_char という 2 つの分別経路を保存する情報が記載されており、何も処理しない場合、プログラムは次の順序で最下層まで進むことができます。倒立退行 (もちろん、ブラウザのバック ボタンを利用することもできますが、このプロセスは不完全です)、したがって、 rout_id と rout_char の情報分解を完了する必要がある経路指示です。
具体的な実行法、假如データ库记これ么一条分类信息:

ID:4

uid:2

タイプ:开公開工具
ルートID:0:1:2:4
rout_char:系统:linux:开公開工具

当プログラムが分別クラス「公開ツール」に到達したとき、経路情報の表示を要求するほかに、パス上の任意の分クラスに移動できるようにする必要がありますか?ここでは、explode() 関数の使用が必要です。と rout_char は相互関係があるため、分解できます:

代码如下
复制幣

$path=explode(":",$rout_id);

$path_gb=explode(":",$rout_char);


今回はすべての分別情報が分解されており、現在行われているのは接続された方法で経路情報です:

代码如下


上記のコードは、パスを復元するためのリンクを追加する機能を実装しています。無限分類を実装しているため、上限はなく、for($i=0;;$i++) に範囲制限はなく、ループ出口が設定されています。条件は、$path_gb[$i] の値が空であることです。次のコードをカテゴリ表示レイアウトのプログラム ブロックに挿入するだけです。

复制幣

for ($i=0;;$i++) {

$a=$i+1;

エコー「」 href=$php_self?func=showtype&uid=",$path[$a],">",$path_gb[$i],":";
if (empty($path_gb[$i])) {
休憩;
}
}

コードは次のとおりですコードをコピー";
//********終わり***********************

} 他 {

$type='父分类';
}

echo "";

echo "";

$result=mysql_query("select * from type where uid=$uid");

$num=mysql_numrows($result);

if (!empty($num)) {

for ($i=0;$i

$id=mysql_result($result,$i,"id");

$type=mysql_result($result,$i,"type");

エコー "";
}
}

エコー "

……
……
//カテゴリを表示********************************************* **
if ($func=='showtype'):

エコー "";

//分類のステータスを決定する

if ($uid!=0) {
$result=mysql_query("select * from type where id=$uid");
$type=mysql_result($result,0,"type");

//******** 新規追加代 ***************

$rout_id=mysql_result($result,0,"rout_id");
$rout_char=mysql_result($result,0,"rout_char");
$path=explode(":",$rout_id);
$path_gb=explode(":",$rout_char);
echo "

";
for ($i=0;;$i++) {
$a=$i+1;
エコー「」 href=$php_self?func=showtype&uid=",$path[$a],">",$path_gb[$i],":";
if (empty($path_gb[$i])) {
休憩;
}
}
echo "
创建分类
$type
";

echo "$type";
echo "

";

エンドイフ; /* ショータイプの終了*/
……
……
?>

この機能ブロックを完了した後、引き続き機密情報を表示できます

http://www.bkjia.com/PHPjc/632808.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632808.html技術記事無限分類 ほとんどの場合、データを分類するとき、ニュースやソフトウェア チャネルにはさまざまなサブカテゴリがある可能性がありますが、これらのサブカテゴリがわからないため、以下の無限分類方法を使用する必要があります...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles