Heim > Backend-Entwicklung > PHP-Tutorial > PHP无限极分门别类

PHP无限极分门别类

WBOY
Freigeben: 2016-06-13 12:18:48
Original
942 Leute haben es durchsucht

PHP无限极分类

概述

??在实际工作中,经常要用到无限极分类。如导航表等等。到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱,代码很多,那些都不靠谱,还是自己捣鼓捣鼓无限极分类了。下面介绍两种无限极分类:递归使用引用

数据准备

<code class="language-php hljs "><span class="hljs-comment">//初始化原始数据(id=>编号,name=>显示名称,pid=>父级目录id,sort=>排序顺序)</span><span class="hljs-variable">$data</span>[<span class="hljs-number">1</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'1'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'一级目录A'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'0'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'1'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">2</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'2'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'一级目录B'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'0'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'2'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">3</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'3'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'一级目录C'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'0'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'3'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">4</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'4'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'一级目录D'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'0'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'4'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">5</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'5'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'二级目录A-1'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'1'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'1'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">6</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'6'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'二级目录A-2'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'1'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'2'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">7</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'7'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'二级目录A-3'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'1'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'3'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">8</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'8'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'二级目录B-1'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'2'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'1'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">9</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'9'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'二级目录B-2'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'2'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'2'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">10</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'10'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'二级目录B-3'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'2'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'3'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">11</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'11'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'二级目录C-1'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'3'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'2'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">12</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'12'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'二级目录D-1'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'4'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'1'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">13</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'13'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'二级目录D-2'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'4'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'2'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">14</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'14'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'三级目录A-2-1'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'6'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'1'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">15</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'15'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'三级目录A-2-2'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'6'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'2'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">16</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'16'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'三级目录C-1-1'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'11'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'1'</span>);<span class="hljs-variable">$data</span>[<span class="hljs-number">17</span>] = <span class="hljs-keyword">array</span>(<span class="hljs-string">'id'</span>=><span class="hljs-string">'17'</span>,<span class="hljs-string">'name'</span>=><span class="hljs-string">'三级目录B-2-1'</span>,<span class="hljs-string">'pid'</span>=><span class="hljs-string">'9'</span>,<span class="hljs-string">'sort'</span>=><span class="hljs-string">'2'</span>);</code>
Nach dem Login kopieren

先写一个显示树结构的函数

<code class="language-php hljs "><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">printTree</span><span class="hljs-params">(<span class="hljs-variable">$data</span>,<span class="hljs-variable">$level</span>=<span class="hljs-number">0</span>)</span>{</span>    <span class="hljs-keyword">foreach</span>(<span class="hljs-variable">$data</span> <span class="hljs-keyword">as</span> <span class="hljs-variable">$key</span>=><span class="hljs-variable">$value</span>){        <span class="hljs-keyword">for</span>(<span class="hljs-variable">$i</span>=<span class="hljs-number">0</span>;<span class="hljs-variable">$i</span><=<span class="hljs-variable">$level</span>;<span class="hljs-variable">$i</span>++){            <span class="hljs-keyword">echo</span> <span class="hljs-string">'&emsp;&emsp;'</span>;        }        <span class="hljs-keyword">echo</span> <span class="hljs-variable">$value</span>[<span class="hljs-string">'name'</span>];        <span class="hljs-keyword">echo</span> <span class="hljs-string">'<br>'</span>;        <span class="hljs-keyword">if</span>(!<span class="hljs-keyword">empty</span>(<span class="hljs-variable">$value</span>[<span class="hljs-string">'children'</span>])){            printTree(<span class="hljs-variable">$value</span>[<span class="hljs-string">'children'</span>],<span class="hljs-variable">$level</span>+<span class="hljs-number">1</span>);        }    }}</code>
Nach dem Login kopieren

递归-无限极分类

使用递归的方式获取无限极分类数组

<code class="language-php hljs "><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getNodeTree</span><span class="hljs-params">(&<span class="hljs-variable">$list</span>,&<span class="hljs-variable">$tree</span>,<span class="hljs-variable">$pid</span>=<span class="hljs-number">0</span>)</span>{</span>    <span class="hljs-keyword">foreach</span>(<span class="hljs-variable">$list</span> <span class="hljs-keyword">as</span> <span class="hljs-variable">$key</span>=><span class="hljs-variable">$value</span>){        <span class="hljs-keyword">if</span>(<span class="hljs-variable">$pid</span> == <span class="hljs-variable">$value</span>[<span class="hljs-string">'pid'</span>]){            <span class="hljs-variable">$tree</span>[<span class="hljs-variable">$value</span>[<span class="hljs-string">'id'</span>]]=<span class="hljs-variable">$value</span>;            <span class="hljs-keyword">unset</span>(<span class="hljs-variable">$list</span>[<span class="hljs-variable">$key</span>]);            getNodeTree(<span class="hljs-variable">$list</span>,<span class="hljs-variable">$tree</span>[<span class="hljs-variable">$value</span>[<span class="hljs-string">'id'</span>]][<span class="hljs-string">'children'</span>],<span class="hljs-variable">$value</span>[<span class="hljs-string">'id'</span>]);        }    }}</code>
Nach dem Login kopieren

使用引用-无限极分类

<code class="language-php hljs "><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">createNodeTree</span><span class="hljs-params">(&<span class="hljs-variable">$list</span>,&<span class="hljs-variable">$tree</span>)</span>{</span>    <span class="hljs-keyword">foreach</span>(<span class="hljs-variable">$list</span> <span class="hljs-keyword">as</span> <span class="hljs-variable">$key</span>=><span class="hljs-variable">$node</span>){        <span class="hljs-keyword">if</span>(<span class="hljs-keyword">isset</span>(<span class="hljs-variable">$list</span>[<span class="hljs-variable">$node</span>[<span class="hljs-string">'pid'</span>]])){            <span class="hljs-variable">$list</span>[<span class="hljs-variable">$node</span>[<span class="hljs-string">'pid'</span>]][<span class="hljs-string">'children'</span>][] = &<span class="hljs-variable">$list</span>[<span class="hljs-variable">$key</span>];        }<span class="hljs-keyword">else</span>{            <span class="hljs-variable">$tree</span>[] = &<span class="hljs-variable">$list</span>[<span class="hljs-variable">$node</span>[<span class="hljs-string">'id'</span>]];        }    }}</code>
Nach dem Login kopieren

果然是厉害,代码简洁精炼,无需递归,执行速度快。这是我偶然在一个网站上看到的,觉得很实用就收藏下来,分享给大家。
网站地址为:http://www.phpddt.com/php/generateTree.html

调用

<code class="language-php hljs "><span class="hljs-comment">//递归-无限极分类调用</span>getNodeTree(<span class="hljs-variable">$data</span>,<span class="hljs-variable">$tree</span>);printTree(<span class="hljs-variable">$tree</span>);<span class="hljs-comment">//使用引用-无限极分类调用</span>createNodeTree(<span class="hljs-variable">$data</span>,<span class="hljs-variable">$tree</span>);printTree(<span class="hljs-variable">$tree</span>);</code>
Nach dem Login kopieren

结果

php 无限极分类

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage