Maison >développement back-end >Problème PHP >Comment implémenter le menu arborescent en php

Comment implémenter le menu arborescent en php

藏色散人
藏色散人original
2020-07-30 09:48:582740parcourir

Comment implémenter le menu arborescent en PHP : récupérez d'abord les données de la base de données et placez-les dans un tableau ; puis convertissez les données en un tableau en forme d'arborescence et enfin convertissez ce tableau en forme d'arborescence en code html ; assez.

Comment implémenter le menu arborescent en php

Recommandé : "Tutoriel vidéo PHP"

php implémente un menu arborescent infini (algorithme de récursion de fonction)

Les étapes approximatives sont les suivantes :

Récupérez d'abord les données de la base de données et placez-les dans un tableau,

Convertissez ensuite les données dans un arbre- tableau en forme d'arbre,

Enfin, convertissez ce tableau en forme d'arbre en code html.

Vous pouvez également combiner les deuxième et troisième étapes en une seule étape.

Les détails sont les suivants :

1. Conception de la base de données :

Le script est le suivant :

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');

2. Récupérez les données de la base de données et placez-les dans un tableau.

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

J'utilise la bibliothèque de classes pear pour les opérations de base de données.

Le format de données du dernier $data est le suivant :

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. Le code pour convertir les données de l'étape précédente en un tableau en forme d'arbre

est le suivant :

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);

Le format de données de sortie final de $tree est :

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. Le code pour convertir un tableau arborescent en html

est le suivant :

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);

Le format du code html de sortie est :

<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. Vous pouvez également combiner les codes aux étapes 3 et 4. Le code est le suivant :

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. Enfin, ajoutez quelques styles CSS.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn