Php 从单个数组创建/更新嵌套数组

Php 从单个数组创建/更新嵌套数组,php,recursion,multidimensional-array,Php,Recursion,Multidimensional Array,我试图用简单的数组创建一个非常特殊的数据结构,但遇到了一些我难以解决的问题 我有一个空数组,我想从中构建空数组 $roles = []; $role_structure = ['domain', 'role_category', 'role']; 我想要它做的是从那里构建一个数组结构,role\u structure的最后一个条目设置为true,其余的是键值 我编写了一个递归函数来实现这一点: static function recursive_append_children($arr, $

我试图用简单的数组创建一个非常特殊的数据结构,但遇到了一些我难以解决的问题

我有一个空数组,我想从中构建空数组

$roles = []; 
$role_structure = ['domain', 'role_category', 'role'];
我想要它做的是从那里构建一个数组结构,
role\u structure
的最后一个条目设置为
true
,其余的是键值

我编写了一个递归函数来实现这一点:

static function recursive_append_children($arr, $arr_to_append) {
        $shifted_val = array_shift($arr_to_append);
        if (array_key_exists($shifted_val, $arr)) {
            $arr[$shifted_val] = static::recursive_append_children($arr[$shifted_val], $arr_to_append);
        } else {
            $arr[$shifted_val] = count($arr_to_append) > 0 ? static::recursive_append_children($arr,
                $arr_to_append) : true;
        }
        return $arr;
    }
如果第一个数组为空,则该选项可以正常工作。但是如果
$roles
数组中已经定义了role\u结构,我只希望它将新角色添加到现有数组中

例如,我可以发送并运行第一个示例,它将给我以下输出:

['domain' => ['role_category' => ['role' => true]]]
但是,如果我将结果数组作为第一个参数发送到上面的函数,并使用另一个类似以下内容的第二个参数数组
['domain'、'other_role\u category'、'other_role']
,它将生成以下数组:

['domain' => [
    'role_category' => ['role' => true],
    'another_role_category' => [
        'role_category' => ['role' => true],
        'another_role' => true
    ]
]
正如您所理解的,我不需要两个
角色\u类别
,我希望能够在不复制值的情况下更新第一个数组。我希望你能理解我的问题,我感谢你的帮助


谢谢。

你能为多个域、角色类别、角色发布你的$role\u结构吗?它看起来像$role\u structure=array(数组('domain','role\u category','role')、数组('other\u domain','other\u role\u category','other\u role');