用 list 处理树状数据(邻接列表)

现有一个数组
PHP code ?
1
2
3
4
5
6
7
8
9
10
$d  array (
   array '公告' , 1, 0 ),
   array '文章' , 2, 0 ),
   array '文章1' , 3, 2 ),
   array '文章2' , 4, 2),
   array '文章1评论' , 5, 3 ),
   array '文章2评论' , 6, 4 ),
   array '文章1评论1' , 7, 3 ),
   array '文章1评论评论' , 8, 5 ),
);
期望如下输出
Plain Text code ?
1
2
3
4
5
6
7
8
公告
文章
   文章1
     文章1评论
       文章1评论评论
     文章1评论1
   文章2
     文章2评论

于是可以
PHP code ?
1
foreach ( $d  as  $t ) list( $a [ $pid ][ $id ],  $id $pid ) =  $t ;
得到
Plain Text code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Array
(
     [0] => Array
         (
             [1] => 公告
             [2] => 文章
         )
 
     [2] => Array
         (
             [3] => 文章1
             [4] => 文章2
         )
 
     [3] => Array
         (
             [5] => 文章1评论
             [7] => 文章1评论1
         )
 
     [4] => Array
         (
             [6] => 文章2评论
         )
 
     [5] => Array
         (
             [8] => 文章1评论评论
         )
 
)
可以看到,数据按第3列聚类了
于是再用一个递归函数就可实现数据的展示了
PHP code ?
1
2
3
4
5
6
function  foo( $ar $pid =0,  $deep =0) {
   foreach ( $ar [ $pid as  $k => $v ) {
     printf( "%s%s\n" str_repeat ( ' ' $deep ),  $v );
     if (isset( $ar [ $k ])) foo( $ar $k $deep +2);
   }
}

调用 foo($a);

以上的内容来自:http://bbs.csdn.net/topics/390524563

问题:按照以上的代码,在我的本地环境中,我的PHP版本是PHP Version 5.2.6,测试提示:Cannot use a scalar value as an array

在晓风的帮助下,将foreach代码改为 foreach($d as $t) $a[$t['2']][$t['1']] = $t[0];经过测试,得到和楼主一样的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值