Heim > Backend-Entwicklung > PHP-Tutorial > 用 list 处理树状数据(邻接列表)解决思路

用 list 处理树状数据(邻接列表)解决思路

WBOY
Freigeben: 2016-06-13 11:51:22
Original
806 Leute haben es durchsucht

用 list 处理树状数据(邻接列表)
现有一个数组

$d = array(<br />  array( '公告', 1, 0 ),<br />  array( '文章', 2, 0 ),<br />  array( '文章1', 3, 2 ),<br />  array( '文章2', 4, 2),<br />  array( '文章1评论', 5, 3 ),<br />  array( '文章2评论', 6, 4 ),<br />  array( '文章1评论1', 7, 3 ),<br />  array( '文章1评论评论', 8, 5 ),<br />);<br />
Nach dem Login kopieren
期望如下输出
公告<br />文章<br />  文章1<br />    文章1评论<br />      文章1评论评论<br />    文章1评论1<br />  文章2<br />    文章2评论<br />
Nach dem Login kopieren

于是可以
foreach($d as $t) list($a[$pid][$id], $id, $pid) = $t;<br />
Nach dem Login kopieren
得到
Array<br />(<br />    [0] => Array<br />        (<br />            [1] => 公告<br />            [2] => 文章<br />        )<br /><br />    [2] => Array<br />        (<br />            [3] => 文章1<br />            [4] => 文章2<br />        )<br /><br />    [3] => Array<br />        (<br />            [5] => 文章1评论<br />            [7] => 文章1评论1<br />        )<br /><br />    [4] => Array<br />        (<br />            [6] => 文章2评论<br />        )<br /><br />    [5] => Array<br />        (<br />            [8] => 文章1评论评论<br />        )<br /><br />)<br />
Nach dem Login kopieren
可以看到,数据按第3列聚类了
于是再用一个递归函数就可实现数据的展示了
function foo($ar, $pid=0, $deep=0) {<br />  foreach($ar[$pid] as $k=>$v) {<br />    printf("%s%s\n", str_repeat(' ', $deep), $v);<br />    if(isset($ar[$k])) foo($ar, $k, $deep+2);<br />  }<br />}<br />
Nach dem Login kopieren
调用 foo($a);

------解决方案--------------------
版主是个大好人
------解决方案--------------------

斑竹对无限级树情有独钟。
每次看都有新收获。
------解决方案--------------------

------解决方案--------------------
前排 学习!
------解决方案--------------------
学习了。呵呵

------解决方案--------------------

------解决方案--------------------
原来是这样表现的。
------解决方案--------------------
真简洁,学习了。
------解决方案--------------------
写的不错啊,学习了
------解决方案--------------------

  static void Main(string[] args)<br>        {<br>            double a, b, c, p, h, area;<br>            Console.Write("请输入三角形的边A: ");<br>            string s = Console.ReadLine();<br>            a = double.Parse(s);<br>            Console.Write("请输入三角形的边B: ");<br>            s = Console.ReadLine();<br>            b = double.Parse(s);<br>            Console.Write("请输入三角形的边C: ");<br>            s = Console.ReadLine();<br>            c = double.Parse(s);<br>            if (a > 0 && b > 0 && c > 0 && a + b > c && a + c > b && b + c > a)<br>            {<br>                Console.WriteLine("三角形的三边分别为:a={0},b={1},c={2}", a, b, c);<br>                p = a + b + c;<div class="clear">
                 
              
              
        
            </div>
Nach dem Login kopieren
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