如何使用另一个数组的值动态注入php数组中的键?

时间:2014-08-26 15:29:56

标签: php arrays

我有一个带有一些值的数组

$folderTree = array('files','js','plugins');

另一个空数组$scanContainer = array();

我想将$folderTree中的每个值递归地映射为$scanContainer中的数组值的键,最后获得这样的数组:

Array (
    [files] => Array (
            [js] => Array (
                 [plugins] => Array (
                           [0] => plugin1.js,
                           [1] => plugin2.js,
                           ...
                         )
               )
          )
)

在最后一个数组中我想放一些值。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

这样做:

$values = ['plugin1.js', ...];
$result = array_reduce(
    array_reverse($folderTree),
    function (array $value, $folder) { return [$folder => $value]; },
    $values
);

您只需将每个内部项连续包装到外部数组中,从$values开始。

注意:缩短了PHP 5.4+数组符号

答案 1 :(得分:1)

从下面的评论中了解到您实际上是在尝试从目录树构建数组。这将是另一种解决方案。

// this is your path; you may build it from an array using implode()
$input = 'files/js/plugins';

$tree  = [];
$pointer = &$tree;
$path = explode('/', $input);

foreach($path as $folder){
    if(!isset($pointer[$folder])){
        $pointer[$folder] = null;
        $pointer = &$pointer[$folder];
    }

    // let's simulate that there are two files within folder 'plugins'
    // in the final application scan each folder for files 
    if($folder == 'plugins'){
        $pointer[0] = "plugin1.js";
        $pointer[1] = "plugin2.js";
    }
}
$pointer = &$tree;

print_r($tree);

输出:

Array (
    [files] => Array (
            [js] => Array (
                    [plugins] => Array (
                            [0] => plugin1.js
                            [1] => plugin2.js
                        )
                )
        )
)

Working demo