我有一个带有一些值的数组
$folderTree = array('files','js','plugins');
另一个空数组$scanContainer = array();
。
我想将$folderTree
中的每个值递归地映射为$scanContainer
中的数组值的键,最后获得这样的数组:
Array (
[files] => Array (
[js] => Array (
[plugins] => Array (
[0] => plugin1.js,
[1] => plugin2.js,
...
)
)
)
)
在最后一个数组中我想放一些值。
有什么建议吗?
答案 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
)
)
)
)