ホームページ バックエンド開発 PHPチュートリアル PHP 無限分類の具体的な原理の分析_PHP チュートリアル

PHP 無限分類の具体的な原理の分析_PHP チュートリアル

Jul 15, 2016 pm 01:30 PM
php もの 特定の 分析する 分類 原理 探検する 無制限 友人 深く行く 必要

初心者にとって、PHP には詳しく調べる必要があることがまだたくさんあります。絶えず問題を解決することによってのみ、私たちは誠実さを理解することができます。 PHP 無制限分類とは何ですか? Windows で新しいフォルダーを作成するのと同じように、新しく作成したフォルダーの下に新しいフォルダーを作成することができます。これは、無限の分類にも当てはまります。そのサブクラスのクラスが作成され、これが無限ループで続きます。

それでは、PHP はどのようにして無限の分類を実現するのでしょうか?さまざまなカテゴリを 1 つずつリストするにはどうすればよいでしょうか?
まずニュース→PHPニュース→PHP6.0が出たというような3段階の分類があると仮定します。
「PHP6.0 がリリースされました」というニュースを見つけたい場合は、まずニュースをクリックし、次に PHP ニュースをクリックしてそれを見つけることができます。つまり、祖父を介してレベルごとに検索できます。クラスとその逆 さて、サブクラスの親クラスがわかっていれば、それを見つけることができます。このようにして、データベースを設計するときに、親クラス ID の追加フィールドを設計して、PHP の無制限の分類機能を実現できます。

//テーブル "class" を作成します
CREATE TABLE `class` (
`id` int(11) NOT NULL auto_increment COMMENT 'category id',
`f_id` int(11) NOT NULL COMMENT 'parent id' ,
`name` varchar(25) Collat​​e gbk_bin NOT NULL COMMENT 'カテゴリ名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_bin AUTO_INCREMENT=1 ;

//まず始めます大きなカテゴリ「News」をデータベースに挿入します。「News」は最大のカテゴリであり、親カテゴリがないため、その f_id を 0 に設定します。
INSERT INTO `class` (`id`, `f_id`, `name`) VALUES(1, 0, 'News'); //id フィールドは自動的に増加するため、値は必要ありません。

//次に、カテゴリ「PHP News」をデータベースに挿入します。その親カテゴリ「News」の ID は 1 なので、その f_id は 1 に設定されます。
INSERT INTO `class` (`id`, `f_id`, `name`) VALUES(2, 1, 'PHP News');

//次に、データベース カテゴリに 'PHP6.0 is out' を挿入します。その親クラス「PHP News」の ID は 2 であるため、その f_id は 2 に設定されます。
INSERT INTO `class` (`id`, `f_id`, `name`) VALUES(3, 2, 'PHP6.0 is out');

//同様に、カテゴリをずっと下まで挿入できます。 PHP の無制限の分類も実現します。
//カテゴリを挿入するための鍵は、このカテゴリの親カテゴリの ID を見つけて、それをこのカテゴリの f_id フィールドの値として使用することであることがわかります。
//カテゴリ「Technology」を「News」と同じレベルに挿入するとします。つまり、これが最大のカテゴリでもあり、上に親クラスが存在しない場合、その f_id も 0 に設定されます。
INSERT INTO `class` (` id`, `f_id`, `name`) VALUES(4, 0, 'Technology');

//「Technology」の下に別のカテゴリ「PHP Technology」があります。それを挿入しますか? まず 'PHP を見つけます。次に、テクノロジーの親クラス「technology」の ID が、独自の f_id フィールドの値として使用されます。
INSERT INTO `class` (`id`, `f_id`, `name`) VALUES(5, 4, 'PHP technology');

//これを見れば、誰もがそれぞれをデータベースに挿入する方法を理解できるはずです。これ以上の例はありません。

各カテゴリをデータベースに挿入する方法はすでにわかっていますが、各カテゴリをリストするにはどうすればよいでしょうか?

<ol class="dp-xml">
<li class="alt"><span><span class="tag">< ?</span><span class="tag-name">php</span><span> </span></span></li><li><span>header("Content-type:text/html;</span><span class="attribute">charset</span><span>=</span><span class="attribute-value">utf</span><span>-8");   </span></li><li class="alt"><span>$</span><span class="attribute">db</span><span>=</span><span class="attribute-value">new</span><span> mysqli("localhost","root","","news_php100") ; <br />//实例化一个数据库连接。使用这个前一定要确保已经加载了mysqli类库,<br />或者用mysql_connect这个方式连接。   </span></li><li><span>if(mysqli_connect_errno()){  </span></li><li class="alt"><span>echo "链接失败:".mysqli_connect_error();  </span></li><li><span>exit(); }   </span></li><li class="alt"><span>$db-</span><span class="tag">></span><span>query("set names utf8");  </span></span></li>
<li>
<span>$</span><span class="attribute">result</span><span>=$db-</span><span class="tag">></span><span>query("select name from class where </span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">0</span><span>"); <br>//查找</span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">0</span><span>的分类,也就是查找每一个大类。  </span>
</li>
<li class="alt">
<span>while($</span><span class="attribute">row</span><span>=$result-</span><span class="tag">></span><span>fetch_assoc()){  </span>
</li>
<li>
<span>echo $row['name']."</span><span class="tag">< </span><span class="tag-name">br</span><span class="tag">></span><span>"; //这样就把每个大类循环出来了。  </span>
</li>
<li class="alt"><span>}  </span></li>
<li><span>//同样我们可以把新闻的子类循环出来。  </span></li>
<li class="alt">
<span>$</span><span class="attribute">result</span><span>=$db-</span><span class="tag">></span><span>query("select * from class where </span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">1</span><span>"); <br>//查找</span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">1</span><span>的分类,也就是查找‘新闻’的子类。  </span>
</li>
<li>
<span>while($</span><span class="attribute">row</span><span>=$result-</span><span class="tag">></span><span>fetch_assoc()){  </span>
</li>
<li class="alt"><span>echo $row['name']."  </span></li>
<li><span>"; //这样就把‘新闻’的子类循环出来了。注意:只是子类,不包括孙子类。  </span></li>
<li class="alt"><span>}  </span></li>
<li><span>//写到这里,我们会发现一个问题,如果这个分类是10级分类,难道我们要写<br>10个循环把它每个子类循环出来?如果是更多级分类呢,这样写显然是不现实的。  </span></li>
<li class="alt"><span>//那又有什么办法解决呢?我们可以写一个递归的函数,把f_id作为参数传入,<br><br>不断循环每一个f_id的值,也就是说把每一个f_id值的子类循环出来。  </span></li>
<li><span>//首先我们把各个分类的值保存在一个二维数组中,在下面的递归函数里有用。  </span></li>
<li class="alt">
<span>$</span><span class="attribute">result</span><span>=$db-</span><span class="tag">></span><span>query("select * from class");  </span>
</li>
<li>
<span>while($</span><span class="attribute">row</span><span>=$result-</span><span class="tag">></span><span>fetch_assoc()){  </span>
</li>
<li class="alt"><span>$arr[]=array($row[id],$row[f_id],$row[name]); //每一行保存一个<br>分类的id,f_id,name的信息。  </span></li>
<li><span>}  </span></li>
<li class="alt">
<span>function fenlei($</span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">0</span><span>){ //$f_id初始化为0,也就是从最大分类开始循环.  </span>
</li>
<li><span>global $arr; //声明$arr为全局变量才可在函数里引用。  </span></li>
<li class="alt">
<span>for($</span><span class="attribute">i</span><span>=</span><span class="attribute-value">0</span><span>;$i</span><span class="tag">< </span><span class="tag-name">count</span><span>($arr);$i++){ //对每个分类进行循环。  </span>
</li>
<li>
<span>if($arr[$i][1]==$f_id){ //$arr[$i][1]表示第$i+1个分类的f_id的值。<br>开始$</span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">0</span><span>,也就是把</span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">0</span><span>的分类输出来。  </span>
</li>
<li class="alt">
<span>echo $arr[$i][2]."</span><span class="tag">< </span><span class="tag-name">br</span><span class="tag">></span><span>"; //$arr[$i][1]表示第$i+1个分类的name的值。  </span>
</li>
<li><span>fenlei($arr[$i][0]); //$arr[$i][1]表示第$i+1个分类的id的值。进行递归<br>,也就是把自己的id作为f_id参数把自己的子类再循环出来。  </span></li>
<li class="alt"><span>}  </span></li>
<li><span>}  </span></li>
<li class="alt"><span>}  </span></li>
<li><span>fenlei(); //使用这个函数.  </span></li>
<li class="alt">
<span class="tag">?></span><span>  </span>
</li>
</ol>
ログイン後にコピー

上記のコード例は、PHP の無制限分類の原理と使用法を詳しく説明しています。


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/446274.html技術記事初心者にとって、PHP には詳細な探索が必要なことがまだたくさんあります。絶えず問題を解決することによってのみ、私たちは誠実さを理解することができます。 PHP 無制限分類とは何ですか?まるで窓のよう…
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

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 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles