Php 搜索数组并查找从属项

Php 搜索数组并查找从属项,php,arrays,Php,Arrays,我有一个类似于下面的树,其中包含第n级权限 Landing Page Footer Archive || || || ||

我有一个类似于下面的树,其中包含第n级权限

            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
        )

)