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

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

WBOY
Release: 2016-06-13 11:51:22
Original
807 people have browsed it

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

于是可以
foreach($d as $t) list($a[$pid][$id], $id, $pid) = $t;<br />
Copy after login
得到
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 />
Copy after login
可以看到,数据按第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 />
Copy after login
调用 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>
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template