Heim  >  Artikel  >  Backend-Entwicklung  >  PHP verwendet Rekursion, um ein unendliches Baummenü zu erstellen

PHP verwendet Rekursion, um ein unendliches Baummenü zu erstellen

墨辰丷
墨辰丷Original
2018-06-06 11:28:281504Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung der Rekursion in PHP zum Erstellen eines unendlichen Baummenüs vorgestellt. Ich hoffe, dass er für alle hilfreich ist.

Beim Schreiben rekursiver Funktionen können Sie erwägen, einige statische Variablen zwischenzuspeichern und zu definieren, um die Ergebnisse des vorherigen Laufs zu speichern. Dies ist sehr hilfreich für die Effizienz der Ausführung mehrerer Programme.
Die ungefähren Schritte sind wie folgt:
Schritt 1:Holen Sie sich die Daten aus der Datenbank und fügen Sie sie in ein Array ein,
Schritt2:Konvertieren Sie die Daten in ein baumförmiges Array,
Schritt3: Konvertieren Sie dieses baumförmige Array in HTML-Code.
Sie können den zweiten und dritten Schritt auch zu einem Schritt kombinieren.
Details sind wie folgt:
1. Datenbankdesign:

CREATE TABLE `bg_cate` (
`cate_Id` int(30) unsigned NOT NULL AUTO_INCREMENT,
`cate_ParentId` int(30) unsigned DEFAULT '0',
`cate_Name` varchar(100) NOT NULL,
`cate_Intro` varchar(500) DEFAULT NULL,
`cate_Order` int(30) unsigned DEFAULT '0',
`cate_Icon` varchar(100) DEFAULT NULL,
PRIMARY KEY (`cate_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=34 ;
--
-- 导出表中的数据 `bg_cate`
--
INSERT INTO `bg_cate` (`cate_Id`, `cate_ParentId`, `cate_Name`, `cate_Intro`, `cate_Order`, `cate_Icon`) VALUES
(4, 0, '往事如风', '记录往事', 0, 'icons/6.gif'),
(5, 0, '水煮三国', '品位三国智慧', 0, 'icons/3.gif'),
(2, 0, '技术学习', '平时学习的一些笔记,欢迎批评指正。', 0, 'icons/18.gif'),
(3, 0, '生活点滴', '记录生活点滴', 0, 'icons/2.gif'),
(6, 0, '栀子花开', '青春无限', 0, 'icons/8.gif'),
(7, 0, '假日休闲', '悠闲、自在', 0, 'icons/24.gif'),
(8, 2, 'html', 'html学习', 0, 'icons/1.gif'),
(9, 2, 'css', 'css学习', 0, 'icons/1.gif'),
(10, 2, 'php', 'php学习', 0, 'icons/18.gif'),
(11, 10, 'php基础知识', 'php基础知识', 0, 'icons/1.gif'),
(12, 10, 'oop', 'oop', 0, 'icons/1.gif'),
(13, 10, 'php安全', '讲述php安全', 0, 'icons/1.gif'),
(14, 10, 'seagull framework', 'seagull framework', 0, 'icons/1.gif'),
(15, 2, 'javascript', 'javascript学习', 0, 'icons/1.gif'),
(16, 2, '设计模式', NULL, 0, 'icons/1.gif'),
(17, 2, '软件工程', '软件工程学习', 0, 'icons/1.gif'),
(18, 3, '厦门生活', '厦门生活', 0, 'icons/8.gif'),
(19, 3, '大学生活', '大学生活', 0, 'icons/8.gif'),
(20, 3, '童年生活', '童年生活', 0, 'icons/15.gif'),
(21, 19, '学习', '学习', 0, 'icons/1.gif'),
(22, 19, '运动', '运动', 0, 'icons/16.gif'),
(23, 19, '旅游', '旅游', 0, 'icons/24.gif'),
(24, 22, '排球', '排球', 0, 'icons/9.gif'),
(25, 22, '篮球', '篮球', 0, 'icons/9.gif'),
(26, 22, '羽毛球', '羽毛球', 0, 'icons/9.gif'),
(27, 22, '乒乓球', '乒乓球', 0, 'icons/9.gif');

Los in die Datenbank zum Abrufen. Legen Sie die Daten in ein Array:

require_once './classes/MyDB.php';
$con = MyDB::singleton();
$sql = <<<SQL
 select * from bg_cate cate
SQL;
$data = $con->getAll($sql);
//print_r($data);

Ich verwende die Pear-Klassenbibliothek für Datenbankoperationen. Die endgültigen Daten Das Format von $data lautet wie folgt:

Array
(
 [0] => Array
 (
 [cate_Id] => 4
 [cate_ParentId] => 0
 [cate_Name] => 往事如风
 [cate_Intro] => 记录往事
 [cate_Order] => 0
 [cate_Icon] => icons/6.gif
 )
 [1] => Array
 (
 [cate_Id] => 5
 [cate_ParentId] => 0
 [cate_Name] => 水煮三国
 [cate_Intro] => 品位三国智慧
 [cate_Order] => 0
 [cate_Icon] => icons/3.gif
 )

3. Der Code zum Konvertieren der Daten im vorherigen Schritt in eine Baumform Das Array lautet wie folgt:

function getTree($data, $pId)
{
$tree = &#39;&#39;;
foreach($data as $k => $v)
{
 if($v[&#39;cate_ParentId&#39;] == $pId)
 { //父亲找到儿子
 $v[&#39;cate_ParentId&#39;] = getTree($data, $v[&#39;cate_Id&#39;]);
 $tree[] = $v;
 //unset($data[$k]);
 }
}
return $tree;
}
$tree = getTree($data, 0);

Das endgültige Ausgabedatenformat von $tree ist:

Array
(
 [0] => Array
 (
 [cate_Id] => 4
 [cate_ParentId] =>
 [cate_Name] => 往事如风
 [cate_Intro] => 记录往事
 [cate_Order] => 0
 [cate_Icon] => icons/6.gif
 )
 [1] => Array
 (
 [cate_Id] => 5
 [cate_ParentId] =>
 [cate_Name] => 水煮三国
 [cate_Intro] => 品位三国智慧
 [cate_Order] => 0
 [cate_Icon] => icons/3.gif
 )
 [2] => Array
 (
 [cate_Id] => 2
 [cate_ParentId] => Array
 (
  [0] => Array
  (
  [cate_Id] => 8
  [cate_ParentId] =>
  [cate_Name] => html
  [cate_Intro] => html学习
  [cate_Order] => 0
  [cate_Icon] => icons/1.gif
  )

4. Konvertieren Sie das Baumarray wie folgt in HTML-Code:

function procHtml($tree)
{
$html = &#39;&#39;;
foreach($tree as $t)
{
 if($t[&#39;cate_ParentId&#39;] == &#39;&#39;)
 {
 $html .= "<li>{$t[&#39;cate_Name&#39;]}</li>";
 }
 else
 {
 $html .= "<li>".$t[&#39;cate_Name&#39;];
 $html .= procHtml($t[&#39;cate_ParentId&#39;]);
 $html = $html."</li>";
 }
}
return $html ? &#39;<ul>&#39;.$html.&#39;</ul>&#39; : $html ;
}
echo procHtml($tree);
输出的html的代码格式为:
<ul>
<li>往事如风</li>
<li>水煮三国</li>
<li>技术学习
 <ul>
 <li>html</li>
 <li>css</li>
 <li>php
 <ul>
 <li>php基础知识</li>
 <li>oop</li>
 <li>php安全</li>

5. Sie können auch den 3. und den Code in Schritt 4 zusammensetzen, der Code lautet wie folgt:

function getTree($data, $pId)
{
$html = &#39;&#39;;
foreach($data as $k => $v)
{
 if($v[&#39;cate_ParentId&#39;] == $pId)
 { //父亲找到儿子
 $html .= "<li>".$v[&#39;cate_Name&#39;];
 $html .= getTree($data, $v[&#39;cate_Id&#39;]);
 $html = $html."</li>";
 }
}
return $html ? &#39;<ul>&#39;.$html.&#39;</ul>&#39; : $html ;
}
echo getTree($data, 0);

6. Fügen Sie abschließend einen CSS-Stil hinzu. Der Effekt ist wie folgt:

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass dies der Fall sein wird hilfreich für das Studium aller.

Verwandte Empfehlungen:

php kombiniert die Ajax-Aktualisierungsfreie Übermittlung von jQuery, um die Like-Funktion zu implementieren

php probabilistische Zufallslotterie Fall

PHP-Lesezeichensystem-Fall

Das obige ist der detaillierte Inhalt vonPHP verwendet Rekursion, um ein unendliches Baummenü zu erstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn