如何在PHP中删除多维数组中的特定层?

如何在PHP中删除多维数组中的特定层?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个多维数组,我想在其中删除一个特定的数据层。基本上,我想删除所有数字标签,即[0]=>Array、[1]=>Array、[2]=>Array和[3]=>Array 以下是我目前拥有的阵列: Array ( [0] => Array ( [CN=Abraham Lincoln,CN=Users,DC=test,DC=io] => Array ( [objectc

我有一个多维数组,我想在其中删除一个特定的数据层。基本上,我想删除所有数字标签,即[0]=>Array、[1]=>Array、[2]=>Array和[3]=>Array

以下是我目前拥有的阵列:

Array
(
    [0] => Array
        (
            [CN=Abraham Lincoln,CN=Users,DC=test,DC=io] => Array
                (
                    [objectclass] => Array
                        (
                            [0] => top
                            [1] => person
                            [2] => organizationalPerson
                            [3] => user
                        )
                    [cn] => Abraham Lincoln
                )
        )

    [1] => Array
        (
            [CN=Administrator,CN=Users,DC=test,DC=io] => Array
                (
                    [objectclass] => Array
                        (
                            [0] => top
                            [1] => person
                            [2] => organizationalPerson
                            [3] => user
                        )
                    [distinguishedname] => CN=Administrator,CN=Users,DC=test,DC=io
                )

        )

    [2] => Array
        (
            [CN=CloudNCUsers,CN=Users,DC=test,DC=io] => Array
                (
                    [objectclass] => Array
                        (
                            [0] => top
                            [1] => group
                        )
                    [distinguishedname] => CN=CloudNCUsers,CN=Users,DC=test,DC=io
                )

        )

    [3] => Array
        (
            [CN=Jill Dope,CN=Users,DC=test,DC=io] => Array
                (
                    [objectclass] => Array
                        (
                            [0] => top
                            [1] => person
                            [2] => organizationalPerson
                            [3] => user
                        )
                    [distinguishedname] => CN=Jill Dope,CN=Users,DC=test,DC=io
                )

        )
)
这是我需要的阵列:

Array
(
    [CN=Abraham Lincoln,CN=Users,DC=test,DC=io] => Array
        (
            [objectclass] => Array
                (
                    [0] => top
                    [1] => person
                    [2] => organizationalPerson
                    [3] => user
                )
            [cn] => Abraham Lincoln
            )
       )

    [CN=Administrator,CN=Users,DC=test,DC=io] => Array
        (
            [objectclass] => Array
                (
                    [0] => top
                    [1] => person
                    [2] => organizationalPerson
                    [3] => user
                )
                [distinguishedname] => CN=Administrator,CN=Users,DC=test,DC=io
         )


    [CN=CloudNCUsers,CN=Users,DC=test,DC=io] => Array
        (
            [objectclass] => Array
                (
                    [0] => top
                    [1] => group
                )
        )

    [CN=Jill Dope,CN=Users,DC=test,DC=io] => Array
        (
            [objectclass] => Array
                (
                    [0] => top
                    [1] => person
                    [2] => organizationalPerson
                    [3] => user
                )
             [distinguishedname] => CN=Jill Dope,CN=Users,DC=test,DC=io
        )
)

任何帮助都将不胜感激,谢谢

您可以使用和从阵列中删除某个级别,并将其保存到新阵列:

$result = array();
foreach ($entries as $entry) {
    $result[key($entry)] = reset($entry);
}

您应该能够在最初加载阵列时执行相同的操作,以保存此额外步骤:

$entry = ldap_get_entries($ldapconnection, $result);
$array[key($entry)] = reset($entry);

注意,这假设所有键值(
CN=Abraham Lincoln,CN=Users,DC=test,DC=io
等)都是唯一的。如果不是,则数组中稍后的值将覆盖输出中较早的值。还要注意,如果
ldap\u get\u条目
返回多个值,这将删除除第一个值以外的所有值。但是,根据您现有的代码和提供的示例数据,情况似乎并非如此。

您可以使用并保存到新阵列,从阵列中删除一个级别:

$result = array();
foreach ($entries as $entry) {
    $result[key($entry)] = reset($entry);
}

您应该能够在最初加载阵列时执行相同的操作,以保存此额外步骤:

$entry = ldap_get_entries($ldapconnection, $result);
$array[key($entry)] = reset($entry);

注意,这假设所有键值(
CN=Abraham Lincoln,CN=Users,DC=test,DC=io
等)都是唯一的。如果不是,则数组中稍后的值将覆盖输出中较早的值。还要注意,如果
ldap\u get\u条目
返回多个值,这将删除除第一个值以外的所有值。但是,根据您现有的代码和提供的示例数据,情况似乎并非如此。

您是如何制作阵列的?修复它,因此不推送到一个新的数组,而是使用您想要的密钥首先初始化一个新容器,然后使用foreach。使用reset函数以子数组值为目标,使用key函数以键为目标,最后简单地将它们分配到新容器中。但是要小心,如果您希望每个子组上有多个值,那么您会将其覆盖到最后一个值。本质上,如果我再次尝试,我如何创建此数组将导致相同的问题。我基本上是对LDAP服务器进行查询,然后通过以下操作保存搜索结果:$array[]=LDAP\u get\u条目($ldapconnection,$result);你是如何制作阵列的?修复它,因此不推送到一个新的数组,而是使用您想要的密钥首先初始化一个新容器,然后使用foreach。使用reset函数以子数组值为目标,使用key函数以键为目标,最后简单地将它们分配到新容器中。但是要小心,如果您希望每个子组上有多个值,那么您会将其覆盖到最后一个值。本质上,如果我再次尝试,我如何创建此数组将导致相同的问题。我基本上是对LDAP服务器进行查询,然后通过以下操作保存搜索结果:$array[]=LDAP\u get\u条目($ldapconnection,$result);