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

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

WBOY
WBOYOriginal
2016-06-13 11:51:22759Durchsuche

用 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 />
期望如下输出
公告<br />文章<br />  文章1<br />    文章1评论<br />      文章1评论评论<br />    文章1评论1<br />  文章2<br />    文章2评论<br />

于是可以
foreach($d as $t) list($a[$pid][$id], $id, $pid) = $t;<br />
得到
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 />
可以看到,数据按第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 />
调用 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>
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