我有一个带有(无尽的("父母"而不是孩子的数组/树。看起来这样:
array(5) {
[0]=>
array(3) {
["group_id"]=>
int(1)
["name"]=>
string(11) "Toplevel"
["parents"]=>
NULL
}
[1]=>
array(3) {
["group_id"]=>
int(2)
["name"]=>
string(13) "SecondLevel"
["parents"]=>
array(1) {
[0]=>
array(3) {
["group_id"]=>
int(1)
["name"]=>
string(11) "Toplevel"
["parents"]=>
NULL
}
}
}
[2]=>
array(3) {
["group_id"]=>
int(4)
["name"]=>
string(12) "ThirdLevel"
["parents"]=>
array(2) {
[0]=>
array(3) {
["group_id"]=>
int(2)
["name"]=>
string(13) "SecondLevel"
["parents"]=>
array(1) {
[0]=>
array(3) {
["group_id"]=>
int(1)
["name"]=>
string(11) "TopLevel"
["parents"]=>
NULL
}
}
}
}
}
您可以看到,树结构的顺序是相反的。我想用儿童作为子节点以正确的顺序重建树。看起来应该这样:
array(5) {
[0]=>
array(3) {
["group_id"]=>
int(1)
["name"]=>
string(11) "Toplevel"
["children"]=>
NULL
}
[1]=>
array(3) {
["group_id"]=>
int(1)
["name"]=>
string(13) "TopLevel"
["children"]=>
array(1) {
[0]=>
array(3) {
["group_id"]=>
int(2)
["name"]=>
string(11) "SecondLevel"
["children"]=>
NULL
}
}
}
[2]=>
array(3) {
["group_id"]=>
int(1)
["name"]=>
string(12) "TopLevel"
["children"]=>
array(2) {
[0]=>
array(3) {
["group_id"]=>
int(2)
["name"]=>
string(13) "SecondLevel"
["children"]=>
array(1) {
[0]=>
array(3) {
["group_id"]=>
int(4)
["name"]=>
string(11) "ThirdLevel"
["children"]=>
NULL
}
}
}
}
}
我只是不知道该怎么做。我可以使用任何简单的功能,例如uasort?
更新以回答问题:
由于这个原因,该数组是这样的构建:
- 用户A可以是不同组的成员
- 组可以是不同子组的成员
- 亚组可以是不同的子组的成员(等(
现在,用户A位于第1组和6中。6是5的子组,是4的子组,是3的子组。这意味着,该用户A也是组5,4的成员,3。要获取与用户A相关的每个组,我将寻找他是(1和6(的直接成员,并查找这些组的所有父母(结果为:1,3,4,5,6(具有递归功能:
private function getParentsArray($group_id) {
$ret=null;
$parents = $this->getGroupParents($group_id);
if(!is_null($parents[0])) {
foreach($parents as $parent) {
$group = $this->getGroup($parent);
if(!empty($this->getGroupParents($parent)) && $this->getGroupParents($parent)[0]) {
$ret[] = array("group_id" => $group["group_id"], "name" => $group["name"], "parents" => $this->getParentsArray($group["group_id"]));
} else {
$ret[] = array("group_id" => $group["group_id"], "name" => $group["name"], "parents" => null);
}
}
}
return $ret;
}
更新2:这是现有数组的var_export,按照要求:
array (
0 =>
array (
'group_id' => 1,
'name' => 'Toplevel',
'parents' => NULL,
),
1 =>
array (
'group_id' => 2,
'name' => 'Secondlevel',
'parents' =>
array (
0 =>
array (
'group_id' => 1,
'name' => 'Toplevel',
'parents' => NULL,
),
),
),
2 =>
array (
'group_id' => 4,
'name' => 'Thirdlevel',
'parents' =>
array (
0 =>
array (
'group_id' => 2,
'name' => 'Secondlevel',
'parents' =>
array (
0 =>
array (
'group_id' => 1,
'name' => 'Toplevel',
'parents' => NULL,
),
),
),
1 =>
array (
'group_id' => 3,
'name' => 'Secondlevel2',
'parents' =>
array (
0 =>
array (
'group_id' => 1,
'name' => 'Toplevel',
'parents' => NULL,
),
),
),
),
),
3 =>
array (
'group_id' => 6,
'name' => 'Firstlevel',
'parents' => NULL,
),
4 =>
array (
'group_id' => 10,
'name' => 'Forthlevel',
'parents' =>
array (
0 =>
array (
'group_id' => 9,
'name' => 'Thirdlevel2',
'parents' =>
array (
0 =>
array (
'group_id' => 7,
'name' => 'Secondlevel3',
'parents' =>
array (
0 =>
array (
'group_id' => 6,
'name' => 'Firstlevel',
'parents' => NULL,
),
),
),
),
),
),
),
)
-
算出总父母
$ parents = $ this-> getgroupparents($ group_id(;
-
在语句中,将阵列($ ret [](存储在反向
中for($ i == count($ parters(; $ i> -1; $ i-({ $ ret [$ i] ='';}
- 使用钥匙父=>儿童