创建使用PHP parentIds一个多级阵列 [英] Creating a multilevel array using parentIds in PHP
问题描述
我试图设置,可以有多个层次,使用 parentId的
来定义其父列表。第一项的 parentId的
为NULL。某些条目的例子:
I'm trying to setup a list that can have multiple levels, using parentId
to define its parent. The first item's parentId
is NULL. Example of some entries:
id parentId name
1 NULL item1
2 NULL item2
3 1 item3
4 2 item4
5 3 item5
6 3 item6
因此,1和2是主要项目;图3是第1子; 4是2的儿童;图5是第3子(其为1本身子); 6也是3子(其为1本身子);等等。
So, 1 and 2 are main items; 3 is a child of 1; 4 is a child of 2; 5 is a child of 3 (which is a child of 1 itself); 6 is also a child of 3 (which is a child of 1 itself); etc.
我坚持创建一个数组,正确添加这些项目到右边的水平。它应该是这样的:
I'm stuck creating an array that correctly adds these items to the right levels. It should look like this:
Array
(
[1] => Array
(
[name] => item1
[parentId] =>
[children] => Array
(
[3] => Array
(
[name] => item3
[parentId] => 1
[children] => Array
(
[5] => Array
(
[name] => item5
[parentId] => 3
)
[6] => Array
(
[name] => item6
[parentId] => 3
)
)
)
)
)
[2] => Array
(
[name] => item2
[parentId] =>
[children] => Array
(
[4] => Array
(
[name] => item4
[parentId] => 2
)
)
)
)
不过,说我经历的所有项目使用的foreach()
,我得到第5项其parentId的是3,而在这一点上,我不知道其中,该父3位于阵列中,以及如何将孩子添加到父
But say I go through all the items using foreach()
, and I get to item 5. Its parentId is 3, but at that point, I have no idea where this parent 3 is located in the array, and how to add children to that parent.
有没有通过这些项目的把戏循环,并把它们全部到位的正确方法?
Is there a trick to loop through these items, and put them all in place the right way?
推荐答案
下面那张
// your original data as an array
$data = array(
array(
'id' => 1,
'parentId' => null,
'name' => 'item1'
),
array(
'id' => 2,
'parentId' => null,
'name' => 'item2'
),
array(
'id' => 3,
'parentId' => 1,
'name' => 'item3'
),
array(
'id' => 4,
'parentId' => 2,
'name' => 'item4'
),
array(
'id' => 5,
'parentId' => 3,
'name' => 'item5'
),
array(
'id' => 6,
'parentId' => 3,
'name' => 'item6'
),
);
一个递归函数
function buildTree( $ar, $pid = null ) {
$op = array();
foreach( $ar as $item ) {
if( $item['parentId'] == $pid ) {
$op[$item['id']] = array(
'name' => $item['name'],
'parentId' => $item['parentId']
);
// using recursion
$children = buildTree( $ar, $item['id'] );
if( $children ) {
$op[$item['id']]['children'] = $children;
}
}
}
return $op;
}
print_r( buildTree( $data ) );
/*
Array
(
[1] => Array
(
[name] => item1
[parentId] =>
[children] => Array
(
[3] => Array
(
[name] => item3
[parentId] => 1
[children] => Array
(
[5] => Array
(
[name] => item5
[parentId] => 3
)
[6] => Array
(
[name] => item6
[parentId] => 3
)
)
)
)
)
[2] => Array
(
[name] => item2
[parentId] =>
[children] => Array
(
[4] => Array
(
[name] => item4
[parentId] => 2
)
)
)
)
*/
这篇关于创建使用PHP parentIds一个多级阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!