现有一个数组
期望如下输出
于是可以
得到
可以看到,数据按第3列聚类了
于是再用一个递归函数就可实现数据的展示了
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 ),
);
|
1
2
3
4
5
6
7
8
|
公告
文章
文章1
文章1评论
文章1评论评论
文章1评论1
文章2
文章2评论
|
于是可以
1
|
foreach
(
$d
as
$t
) list(
$a
[
$pid
][
$id
],
$id
,
$pid
) =
$t
;
|
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评论评论
)
)
|
于是再用一个递归函数就可实现数据的展示了
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];经过测试,得到和楼主一样的内容。