検索
ホームページバックエンド開発PHPチュートリアルPHP は再帰関数を使用して無限分類を実現します

PHP は再帰関数を使用して無限分類を実現します

PHP を学習する多くの友人は、スキルを向上させる方法としてオンライン モールを構築しようとすると思います。商品分類や商品名などのさまざまな操作に慣れてきたら、無制限に分類リストを作成してみましょう。

無限分類とは何ですか?

無限レベル分類は、部門組織、記事分類、主題分類などによく使用される分類手法です。実際、よく考えてみると、服は紳士服と婦人服、トップスとパンツに分けることができ、また年齢層によっても分類することができます。分類はどこにでもあり、分類は「無限」であるように見えます。無限分類の必要性についてはここでは話しません。

無限分類の原理の紹介

無限分類は「高度」に見えるかもしれませんが、実際には原理は非常に単純です。無制限の分類には、コードの創意工夫が必要なだけでなく、データベース設計の合理性も必要になります。無限の分類を満たすには、データベースに id と pid という 2 つの必須フィールドが必要です。 id はそれ自体を識別するために使用され、pid は親 ID を示すために使用されます。言い換えれば、各分類レコードはそれ自体を説明するだけでなく、最も密接に関係している別の ID も説明します。複雑そうに見えた問題も、ちょっとした工夫で解決しました。

早速、この記事の例を紹介します。

熱心な海賊ファンとして、この記事では『ワンピース』のキャラクター編成を例に挙げていきます。

データベースの準備:

テーブル onepiece の作成:

<span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span><span style="color: #000000;"> onepiece(    id </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> auto_increment,    pid </span><span style="color: #0000ff;">int</span> <span style="color: #808080;">not</span> <span style="color: #0000ff;">null</span><span style="color: #000000;">,    name </span><span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">225</span>) <span style="color: #808080;">not</span> <span style="color: #0000ff;">null</span><span style="color: #000000;">,    </span><span style="color: #0000ff;">primary</span> <span style="color: #0000ff;">key</span><span style="color: #000000;">(id));</span>

テスト データの挿入:

<span style="color: #0000ff;">insert</span> onepiece <span style="color: #0000ff;">values</span><span style="color: #000000;">    (</span><span style="color: #800000; font-weight: bold;">1</span>,<span style="color: #800000; font-weight: bold;">0</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">海军</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">2</span>,<span style="color: #800000; font-weight: bold;">0</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">海贼</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">3</span>,<span style="color: #800000; font-weight: bold;">0</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">革命军</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">4</span>,<span style="color: #800000; font-weight: bold;">1</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">青雉</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">5</span>,<span style="color: #800000; font-weight: bold;">1</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">赤犬</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">6</span>,<span style="color: #800000; font-weight: bold;">1</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">黄猿</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">7</span>,<span style="color: #800000; font-weight: bold;">2</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">四皇</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">8</span>,<span style="color: #800000; font-weight: bold;">2</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">七武海</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">9</span>,<span style="color: #800000; font-weight: bold;">2</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">草帽海贼团</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">10</span>,<span style="color: #800000; font-weight: bold;">9</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">索隆</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">11</span>,<span style="color: #800000; font-weight: bold;">7</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">香克斯</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">12</span>,<span style="color: #800000; font-weight: bold;">8</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">多弗朗明哥</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),    (</span><span style="color: #800000; font-weight: bold;">13</span>,<span style="color: #800000; font-weight: bold;">8</span>,<span style="color: #ff0000;">'</span><span style="color: #ff0000;">克洛克达尔</span><span style="color: #ff0000;">'</span>);

これは現在でも普及科学の下でのワンピースの設定です。世界は海軍、海賊、革命軍の 3 つの主要な陣営に分かれています。海軍には青キジ、赤犬、黄猿という大将がいます。海賊には四皇、七武海、麦わらの一味がいます。四皇にはシャンクス、七武海にはドフラミンゴとクロコダイル、麦わらの一味にはゾロがいます。 (宣伝: ワンピースは本当に良いです)。

最終目標:

今日私たちが作っているのは、2 つの形式の無限分類形式です。1 つはドロップダウン リスト タイプ、もう 1 つはドロップダウン リスト タイプです。もう1つはナビゲーションリンクタイプです。レンダリングに直接移動します:

ドロップダウン リスト ナビゲーション リンク スタイル

サンプル コード:

Unlimited クラスをカプセル化して、diaplayList() を呼び出してドロップダウン リスト フォームを表示し、diaplayLink を呼び出してナビゲーション リンク カテゴリを表示しました。カテゴリを追加 (addNodes()) および削除 (deleteNodes) することもできます。

<span style="color: #000000;">php</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Unlimited{    </span><span style="color: #0000ff;">protected</span> <span style="color: #800080;">$mysqli</span><span style="color: #000000;">;    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> __construct(<span style="color: #800080;">$config</span><span style="color: #000000;">){        </span><span style="color: #800080;">$this</span>->mysqli=<span style="color: #0000ff;">new</span> mysqli(<span style="color: #800080;">$config</span>['host'],<span style="color: #800080;">$config</span>['user'],<span style="color: #800080;">$config</span>['pwd'<span style="color: #000000;">]);        </span><span style="color: #800080;">$this</span>->mysqli->select_db(<span style="color: #800080;">$config</span>['db'<span style="color: #000000;">]);        </span><span style="color: #800080;">$this</span>->mysqli->set_charset('utf8'<span style="color: #000000;">);        </span><span style="color: #0000ff;">if</span> (<span style="color: #800080;">$this</span>->mysqli-><span style="color: #000000;">connect_errno) {            </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$this</span>->mysqli-><span style="color: #000000;">connect_error;        }    }        </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> getList(<span style="color: #800080;">$pid</span>=0,&<span style="color: #800080;">$result</span>=<span style="color: #0000ff;">array</span>(),<span style="color: #800080;">$spac</span>=0<span style="color: #000000;">){        </span><span style="color: #800080;">$spac</span>=<span style="color: #800080;">$spac</span>+2<span style="color: #000000;">;        </span><span style="color: #800080;">$sql</span>="select * from onepiece where pid={<span style="color: #800080;">$pid</span>}"<span style="color: #000000;">;        </span><span style="color: #800080;">$rs</span>=<span style="color: #800080;">$this</span>->mysqli->query(<span style="color: #800080;">$sql</span><span style="color: #000000;">);        </span><span style="color: #0000ff;">while</span>(<span style="color: #800080;">$row</span>=<span style="color: #800080;">$rs</span>-><span style="color: #000000;">fetch_assoc()) {            </span><span style="color: #800080;">$row</span>['name']=<span style="color: #008080;">str_repeat</span>(' &nbsp',<span style="color: #800080;">$spac</span>).<span style="color: #800080;">$row</span>['name'<span style="color: #000000;">];            </span><span style="color: #800080;">$result</span>[]=<span style="color: #800080;">$row</span><span style="color: #000000;">;            </span><span style="color: #800080;">$this</span>->getList(<span style="color: #800080;">$row</span>['id'],<span style="color: #800080;">$result</span>,<span style="color: #800080;">$spac</span><span style="color: #000000;">);                    }        </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$result</span><span style="color: #000000;">;    }    </span><span style="color: #008000;">/*</span><span style="color: #008000;">*     * 展现下拉列表式分类     * @return [type]      </span><span style="color: #008000;">*/</span>    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> displayList(){        </span><span style="color: #800080;">$rs</span>=<span style="color: #800080;">$this</span>-><span style="color: #000000;">getList();        </span><span style="color: #800080;">$str</span>="<select name="cate">"<span style="color: #000000;">;        </span><span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$rs</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$key</span> => <span style="color: #800080;">$val</span><span style="color: #000000;">) {            </span><span style="color: #800080;">$str</span>.="<option>{<span style="color: #800080;">$val</span>['name']}</option>"<span style="color: #000000;">;        }        </span><span style="color: #800080;">$str</span>.="</select>"<span style="color: #000000;">;        </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$str</span><span style="color: #000000;">;    }    </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> getLink(<span style="color: #800080;">$cid</span>,&<span style="color: #800080;">$result</span>=<span style="color: #0000ff;">array</span><span style="color: #000000;">()){        </span><span style="color: #800080;">$sql</span>="select * from onepiece where id={<span style="color: #800080;">$cid</span>}"<span style="color: #000000;">;        </span><span style="color: #800080;">$rs</span>=<span style="color: #800080;">$this</span>->mysqli->query(<span style="color: #800080;">$sql</span><span style="color: #000000;">);        </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$row</span>=<span style="color: #800080;">$rs</span>-><span style="color: #000000;">fetch_assoc()){            </span><span style="color: #800080;">$result</span>[]=<span style="color: #800080;">$row</span><span style="color: #000000;">;            </span><span style="color: #800080;">$this</span>->getLink(<span style="color: #800080;">$row</span>['pid'],<span style="color: #800080;">$result</span><span style="color: #000000;">);        }        </span><span style="color: #0000ff;">return</span> <span style="color: #008080;">array_reverse</span>(<span style="color: #800080;">$result</span><span style="color: #000000;">);    }    </span><span style="color: #008000;">/*</span><span style="color: #008000;">*     * 展现导航Link     * @param  [type] $cid [description]     * @return [type]      [description]     </span><span style="color: #008000;">*/</span>    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> displayLink(<span style="color: #800080;">$cid</span><span style="color: #000000;">){        </span><span style="color: #800080;">$rs</span>=<span style="color: #800080;">$this</span>->getLink(<span style="color: #800080;">$cid</span><span style="color: #000000;">);        </span><span style="color: #800080;">$str</span>=''<span style="color: #000000;">;        </span><span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$rs</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$val</span><span style="color: #000000;">) {            </span><span style="color: #800080;">$str</span>.="<a href="">{<span style="color: #800080;">$val</span>['name']}</a>>"<span style="color: #000000;">;        }        </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$str</span><span style="color: #000000;">;    }    </span><span style="color: #008000;">/*</span><span style="color: #008000;">*     * 增加分类     * @param [type] $pid  父类id     * @param [type] $name 本类名     </span><span style="color: #008000;">*/</span>    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> addNodes(<span style="color: #800080;">$pid</span>,<span style="color: #800080;">$name</span><span style="color: #000000;">){        </span><span style="color: #800080;">$sql</span>="insert into onepiece values('',{<span style="color: #800080;">$pid</span>},'".<span style="color: #800080;">$name</span>."')"<span style="color: #000000;">;        </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>->mysqli->query(<span style="color: #800080;">$sql</span><span style="color: #000000;">)){            </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;        }    }    </span><span style="color: #008000;">/*</span><span style="color: #008000;">*     * 删除分类     * @param  [type] $id 本类id     * @return [type]          </span><span style="color: #008000;">*/</span>    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> deleteNodes(<span style="color: #800080;">$id</span><span style="color: #000000;">){        </span><span style="color: #800080;">$sql</span>="select * from onepiece where pid ={<span style="color: #800080;">$id</span>}"<span style="color: #000000;">;        </span><span style="color: #800080;">$rs</span>=<span style="color: #800080;">$this</span>->mysqli->query(<span style="color: #800080;">$sql</span><span style="color: #000000;">);        </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$row</span>=<span style="color: #800080;">$rs</span>-><span style="color: #000000;">fetch_assoc()){            </span><span style="color: #800080;">$mes</span>="还有子元素,请勿删除"<span style="color: #000000;">;        }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{            </span><span style="color: #800080;">$sql</span>="delete from onepiece where id={<span style="color: #800080;">$id</span>}"<span style="color: #000000;">;            </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>->mysqli->query(<span style="color: #800080;">$sql</span><span style="color: #000000;">)){                </span><span style="color: #800080;">$mes</span>="删除成功"<span style="color: #000000;">;            }        }        </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$mes</span><span style="color: #000000;">;    }}</span>

クラス内の関数は主に再帰関数の手法を採用しています。再帰関数を深く理解していれば、残りは理解できます。再帰関数を実装する 3 つの方法については、後のセクションで詳しく説明します。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
华为GT3 Pro和GT4的差异是什么?华为GT3 Pro和GT4的差异是什么?Dec 29, 2023 pm 02:27 PM

许多用户在选择智能手表的时候都会选择的华为的品牌,其中华为GT3pro和GT4都是非常热门的选择,不少用户都很好奇华为GT3pro和GT4有什么区别,下面就就给大家介绍一下二者。华为GT3pro和GT4有什么区别一、外观GT4:46mm和41mm,材质是玻璃表镜+不锈钢机身+高分纤维后壳。GT3pro:46.6mm和42.9mm,材质是蓝宝石玻璃表镜+钛金属机身/陶瓷机身+陶瓷后壳二、健康GT4:采用最新的华为Truseen5.5+算法,结果会更加的精准。GT3pro:多了ECG心电图和血管及安

C语言return的用法详解C语言return的用法详解Oct 07, 2023 am 10:58 AM

C语言return的用法有:1、对于返回值类型为void的函数,可以使用return语句来提前结束函数的执行;2、对于返回值类型不为void的函数,return语句的作用是将函数的执行结果返回给调用者;3、提前结束函数的执行,在函数内部,我们可以使用return语句来提前结束函数的执行,即使函数并没有返回值。

修复:截图工具在 Windows 11 中不起作用修复:截图工具在 Windows 11 中不起作用Aug 24, 2023 am 09:48 AM

为什么截图工具在Windows11上不起作用了解问题的根本原因有助于找到正确的解决方案。以下是截图工具可能无法正常工作的主要原因:对焦助手已打开:这可以防止截图工具打开。应用程序损坏:如果截图工具在启动时崩溃,则可能已损坏。过时的图形驱动程序:不兼容的驱动程序可能会干扰截图工具。来自其他应用程序的干扰:其他正在运行的应用程序可能与截图工具冲突。证书已过期:升级过程中的错误可能会导致此issu简单的解决方案这些适合大多数用户,不需要任何特殊的技术知识。1.更新窗口和Microsoft应用商店应用程

PHP Fatal error: Call to undefined function mysqli_connect()的解决方法PHP Fatal error: Call to undefined function mysqli_connect()的解决方法Jun 23, 2023 am 09:40 AM

在使用PHP编写Web应用程序时,经常会使用MySQL数据库来存储数据。PHP提供了一种与MySQL数据库进行交互的方法,称为MySQLi。然而,有时在使用MySQLi时,会遇到一个错误信息,如以下所示:PHPFatalerror:Calltoundefinedfunctionmysqli_connect()这个错误信息意味着PHP无法找到my

Java中return和finally语句的执行顺序是怎样的?Java中return和finally语句的执行顺序是怎样的?Apr 25, 2023 pm 07:55 PM

源码:publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}#输出上述代码的输出可以简单地得出结论:return在finally之前执行,我们来看下字节码层面上发生了什么事情。下面截取case1方法的部分字节码,并且对照源码,将每个指令的含义注释在

php无法连接mysqli怎么办php无法连接mysqli怎么办Nov 09, 2022 am 10:07 AM

php无法连接mysqli的解决办法:1、打开“php.ini”文件;2、找到“mysqli.reconnect”;3、将“mysqli.reconnect = OFF”改成“mysqli.reconnect = on”即可。

PHP PDO 与 mysqli:比较和对比PHP PDO 与 mysqli:比较和对比Feb 19, 2024 pm 12:24 PM

PDOPDO是一个面向对象的数据库访问抽象层,它为PHP提供了一个统一的接口,允许您使用相同的代码与不同的数据库(如Mysql、postgresql、oracle)进行交互。PDO隐藏了底层数据库连接的复杂性,简化了数据库操作。优缺点优点:统一接口,支持多种数据库简化数据库操作,降低开发难度提供预处理语句,提高安全性支持事务处理缺点:性能可能比原生扩展稍低依赖外部库,可能会增加开销演示代码使用PDO连接mysql数据库:$db=newPDO("mysql:host=localhost;dbnam

mysql的运行文件是什么mysql的运行文件是什么Apr 11, 2023 am 10:38 AM

mysql的运行文件是mysqld;mysqld是一个可执行文件,代表着Mysql服务器程序,执行这个文件可以直接启动一个服务器进程;而mysqld_safe是一个启动脚本,它会间接调用mysqld,并且还会顺带启动一个监控进程。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

メモ帳++7.3.1

メモ帳++7.3.1

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

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。