Php 搜索数组并查找从属项
我有一个类似于下面的树,其中包含第n级权限Php 搜索数组并查找从属项,php,arrays,Php,Arrays,我有一个类似于下面的树,其中包含第n级权限 Landing Page Footer Archive || || || ||
Landing Page Footer Archive
|| || ||
|| || ||
Current ========== Pipeline=== BHI Phonebook==Password Keeper Edit==View==Delete
|| ||
Open Forms Open Forms
|| ||
Blog Request Blog Request
|| ||
Add == Edit Add == Edit
样本阵列
预期产量
这里,1:登录页,15:页脚,18:存档(它的“Id”属性)等等
在上面的数组之后,我将不得不进行第n级循环。比如: 到目前为止,我所做的一切都没有成功
//To find out the how manhy levels are in array
$unique_level = array_unique(array_map(function ($i) { return $i['item_level']; }, $list));
$parent_data = $level_data = array();
foreach($list as $key=>$res)
{
if($res['parent']==0)
{
if(!array_key_exists($res['id'],$parent_data)) // First insert all unique parent at level 1
{
$parent_data[$res['id']] = $res;
}
}
$level_data[$res['parent']][] = array(
'display_name' => $res['display_name'],
'id' => $res['id'],
'parent' => $res['parent'],
);
}
随时可用的json
[{“家长”:“0”,“项目等级”:“1”,“id”:“1”,“显示名称”:“登录页”},{“家长”:“1”,“项目等级”:“2”,“id”:“2”,“显示名称”:“当前”},{“家长”:“2”,“项目等级”:“3”,“id”:“5”,“显示名称”:“打开表单”},{“家长”:“5”,“项目等级”:“4”,“id”:“9”,“显示名称”:“博客请求”},{“家长”:“9”,“项目等级”:“5”,“id”:“10”,“显示名称”:“添加”}{“父项”:“9”、“项级”:“5”、“id”:“11”、“显示名称”:“更新”}、{“父项”:“1”、“项级”:“2”、“id”:“3”、“显示名称”:“管道”}、{“父项”:“3”、“项级”:“3”、“id”:“6”、“显示名称”:“打开窗体”}、{“父项”:“6”、“项级”:“4”、“id”:“12”、“显示名称”:“博客请求”}、{“父项级”:“12”、“项级”:“5”、“id”:“13”、“显示名称”:“添加”{12、“项目级别”:“5”、“id”:“14”、“显示名称”:“更新”}、{“父级”:“1”、“项目级别”:“2”、“id”:“4”、“显示名称”:“BHI”}、{“父级”:“1”、“项目级别”:“2”、“id”:“7”、“显示名称”:“添加属性”}、{“父级”:“1”、“项目级别”:“2”、“id”:“8”、“显示名称”:“显示子级属性”}、{“父级”:“0”、“项目级别”:“1”、“id”:“15”、“显示名称”:“页脚父级”{“,”项目级别“:”2“,”id“:”16“,”显示名称“:”电话簿“,”家长“:”15“,”项目级别“:”2“,”id“:”17“,”显示名称“:”密码管理员“,”家长“,”0“,”项目级别“:”1“,”id“,”显示名称“:”存档“,”家长“:”18“,”项目级别“,”id“:”19“,”显示名称“,”编辑“,”家长“,”18“,”项目级别“:”2“,”id“:”查看“,”查看“,”家长“,”18“,”家长“,”,“项目级别”:“2”,“id”:“21”,“显示名称”:“删除”}]
您好,请尝试以下代码:
$results=array();
$parent1='';$parent=$parent2='';
foreach ($list as $key => $value) {
if($value['parent']==0)
{
$results[$value['id']]=$value;
$id=$value["id"];
}
if($id==$value['parent']&&$id!="")
{
$results[$id][$value['id']]=$value;
$parent=$value['id'];
}
if($parent==$value['parent']&&$parent!="")
{
$results[$id][$parent][$value['id']]=$value;
$parent1=$value['id'];
}
if($parent1==$value['parent']&&$parent1!="")
{
$results[$id][$parent][$parent1][$value['id']]=$value;
$parent2=$value['id'];
}
if($parent2==$value['parent']&&$parent2!="")
{
$results[$id][$parent][$parent1][$parent2][$value['id']]=$value;
$parent3=$value['id'];
}
}
echo '<pre>';
print_r($results);
echo '</pre>';
$results=array();
$parent1='';$parent=$parent2='';
foreach($key=>$value){
如果($value['parent']==0)
{
$results[$value['id']]=$value;
$id=$value[“id”];
}
如果($id=$value['parent']&&$id!=“”)
{
$results[$id][$value['id']]=$value;
$parent=$value['id'];
}
如果($parent==$value['parent']&&$parent!=“”)
{
$results[$id][$parent][$value['id']]]=$value;
$parent1=$value['id'];
}
如果($parent1==$value['parent']&&$parent1!=“”)
{
$results[$id][$parent][$parent1][$value['id']]]=$value;
$parent2=$value['id'];
}
如果($parent2==$value['parent']&&$parent2!=“”)
{
$results[$id][$parent][$parent1][$parent2][$value['id']]]=$value;
$parent3=$value['id'];
}
}
回声';
打印(结果);
回声';
我最近找到的是
1 => array(
2=>array(5=>array(9=>array(10,11))),
3=>array(6=>array(12=>array(13,14))),
4,//As it doesnt have any child
7,//As it doesnt have any child
8 //As it doesnt have any child
),
你的问题是你在哪里有像
Array
(
[1] => Array
(
[2] => Array
(
[5] => Array
(
[9] => Array
(
[10] => 10
[11] => 11
)
)
)
[3] => Array
(
[6] => Array
(
[12] => Array
(
[13] => 13
[14] => 14
)
)
)
[4] => 4
[7] => 7
[8] => 8
)
[15] => Array
(
[16] => 16
[17] => 17
)
[18] => Array
[19] => 19
[20] => 20
[21] => 21
)
) [19] => 19
[20] => 20
[21] => 21
)
)
由于几乎有元素4、7和8没有键,所以数组中的所有元素都有键,这是行不通的
我所做的输出是
如您所见,元素4的值为4。很高兴能够提供帮助。您能将其标记为已回答,谢谢:)
$list = Array
(
0 => Array
(
'parent' => 0,
'item_level' => 1,
'id' => 1,
'display_name' => 'Landing Page'
),
1 => Array
(
'parent' => 1,
'item_level' => 2,
'id' => 2,
'display_name' => 'Current'
),
2 => Array
(
'parent' => 2,
'item_level' => 3,
'id' => 5,
'display_name' => 'Open Forms'
),
3 => Array
(
'parent' => 5,
'item_level' => 4,
'id' => 9,
'display_name' => 'Blog Request'
),
4 => Array
(
'parent' => 9,
'item_level' => 5,
'id' => 10,
'display_name' => 'Add'
),
5 => Array
(
'parent' => 9,
'item_level' => 5,
'id' => 11,
'display_name' => 'Update'
),
6 => Array
(
'parent' => 1,
'item_level' => 2,
'id' => 3,
'display_name' => 'Pipeline'
),
7 => Array
(
'parent' => 3,
'item_level' => 3,
'id' => 6,
'display_name' => 'Open Forms'
),
8 => Array
(
'parent' => 6,
'item_level' => 4,
'id' => 12,
'display_name' => 'Blog Request'
),
9 => Array
(
'parent' => 12,
'item_level' => 5,
'id' => 13,
'display_name' => 'Add'
),
10 => Array
(
'parent' => 12,
'item_level' => 5,
'id' => 14,
'display_name' => 'Update'
),
11 => Array
(
'parent' => 1,
'item_level' => 2,
'id' => 4,
'display_name' => 'BHI'
),
12 => Array
(
'parent' => 1,
'item_level' => 2,
'id' => 7,
'display_name' => 'Add Property'
),
13 => Array
(
'parent' => 1,
'item_level' => 2,
'id' => 8,
'display_name' => 'Show Child Properties'
),
14 => Array
(
'parent' => 0,
'item_level' => 1,
'id' => 15,
'display_name' => 'Footer'
),
15 => Array
(
'parent' => 15,
'item_level' => 2,
'id' => 16,
'display_name' => 'Phonebook'
),
16 => Array
(
'parent' => 15,
'item_level' => 2,
'id' => 17,
'display_name' => 'Password Keeper'
),
17 => Array
(
'parent' => 0,
'item_level' => 1,
'id' => 18,
'display_name' => 'Archive'
),
18 => Array
(
'parent' => 18,
'item_level' => 2,
'id' => 19,
'display_name' => 'Edit'
),
19 => Array
(
'parent' => 18,
'item_level' => 2,
'id' => 20,
'display_name' => 'View'
),
20 => Array
(
'parent' => 18,
'item_level' => 2,
'id' => 21,
'display_name' => 'Delete'
),
);
$results=array();
$parent1='';$parent=$parent2='';
foreach ($list as $key => $value) {
if($value['parent']==0)
{
$results[$value['id']]=$value;
$id=$value["id"];
}
if($id==$value['parent']&&$id!="")
{
$results[$id][$value['id']]=$value;
$parent=$value['id'];
}
if($parent==$value['parent']&&$parent!="")
{
$results[$id][$parent][$value['id']]=$value;
$parent1=$value['id'];
}
if($parent1==$value['parent']&&$parent1!="")
{
$results[$id][$parent][$parent1][$value['id']]=$value;
$parent2=$value['id'];
}
if($parent2==$value['parent']&&$parent2!="")
{
$results[$id][$parent][$parent1][$parent2][$value['id']]=$value;
$parent3=$value['id'];
}
}
echo '<pre>';
print_r($results);
echo '</pre>';
$list = json_decode($data, true);
$baseList = array_combine(array_column($list,'id'), $list);
$hierarchy = [];
foreach ( $baseList as $newItem ) {
$parent = $newItem['parent'];
$hierarchy[$parent][] = $newItem['id'];
}
function buildTree ( $startNode, $hierarchy) {
$newLevel = [];
foreach ( $startNode as $children ) {
if ( isset($hierarchy[$children])) {
$newLevel[$children] = buildTree($hierarchy[$children], $hierarchy);
}
else {
$newLevel[$children] = $children;
}
}
return $newLevel;
}
$finalOutput = buildTree ( $hierarchy[0], $hierarchy );
print_r($finalOutput);
1 => array(
2=>array(5=>array(9=>array(10,11))),
3=>array(6=>array(12=>array(13,14))),
4,//As it doesnt have any child
7,//As it doesnt have any child
8 //As it doesnt have any child
),
Array
(
[1] => Array
(
[2] => Array
(
[5] => Array
(
[9] => Array
(
[10] => 10
[11] => 11
)
)
)
[3] => Array
(
[6] => Array
(
[12] => Array
(
[13] => 13
[14] => 14
)
)
)
[4] => 4
[7] => 7
[8] => 8
)
[15] => Array
(
[16] => 16
[17] => 17
)
[18] => Array
[19] => 19
[20] => 20
[21] => 21
)
) [19] => 19
[20] => 20
[21] => 21
)
)