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

时间:2015-01-29 11:41:59

标签: php recursion multidimensional-array

我正在尝试使用简单的数组创建一个非常具体的数据结构,但是遇到了一些我遇到麻烦的问题。

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

$roles = []; 
$role_structure = ['domain', 'role_category', 'role'];

我想要它做的是建立一个数组结构,role_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_structure,我只希望它将新角色添加到现有数组中。

所以,例如我可以发送第一个例子,它会给我以下输出:

['domain' => ['role_category' => ['role' => true]]]

但是如果我将结果数组作为第一个参数发送到上面的函数并且使用另一个看起来像这个['domain', 'another_role_category', 'another_role']的第二个参数数组,它将生成以下数组:

['domain' => [
    'role_category' => ['role' => true],
    'another_role_category' => [
        'role_category' => ['role' => true],
        'another_role' => true
    ]
]

你肯定明白,我不想要role_category中的两个,我希望能够更新第一个数组而不重复这些值。我希望你理解我的问题,我很感激所有的帮助。

感谢。

0 个答案:

没有答案