Php 将简单数组转换为关联数组,基于';目录树';就像第一个的值一样

Php 将简单数组转换为关联数组,基于';目录树';就像第一个的值一样,php,arrays,associative-array,Php,Arrays,Associative Array,例如,我有一个数组 Array ( [0] => folder1/file1.txt [1] => folder1/file2.txt [2] => file2.txt [3] => folder2/file1.txt [4] => folder1/subfolder1/file1.txt [5] => folder1/subfolder2/file2.txt [6] => file1.txt

例如,我有一个数组

Array
(
    [0] => folder1/file1.txt
    [1] => folder1/file2.txt
    [2] => file2.txt
    [3] => folder2/file1.txt
    [4] => folder1/subfolder1/file1.txt
    [5] => folder1/subfolder2/file2.txt
    [6] => file1.txt
    [7] => file3.txt
    [8] => folder1/subfolder2/file1.txt
)
我需要一个线索来说明如何根据给定的值创建“目录树”数组,它可以如下所示:

Array
(
    [folder1] => Array
        (
            [0] => file1.txt
            [1] => file2.txt
            [subfolder1] => Array
                (
                    [0] => file1.txt
                )

            [subfolder2] => Array
                (
                    [0] => file1.txt
                    [1] => file2.txt
                )

        )

    [0] => file1.txt
    [1] => file2.txt
    [2] => file3.txt
)
现在,第二个数组是第一个数组的树(手动创建)。=)

我不知道如何自动实现这一点。

简化了示例(),它将按照您的意愿生成输出,但如果在同一目录级别()中有相同的文件夹和文件名,则会产生冲突()


为了解决同一级别上命名的同一文件夹和文件的问题,您可以在末尾创建带斜杠的文件夹索引,如
文件夹/
,这样就不会有任何冲突()。

可能会重复?@Kristen Jukowski该主题涉及真实的文件和目录,而我没有ones@KristenJukowski这个问题从递归目录迭代器开始,这个问题从平面数组开始。我敢肯定,不久前我回答了一个类似的问题,我正在努力寻找它。@Barmar我也在寻找它。不成功的事情,比如?但是这种结构会带来麻烦:如果你有一个名为
0
的文件夹怎么办?
你可以创建文件夹索引
你的意思是空文件夹吗?不,我的意思是如果你有一个文件夹,数组索引将用斜杠表示为
文件夹
。并且还支持空文件夹。
$files = [
    'folder1/file1.txt',
    'folder1/file2.txt',
    'file2.txt',
    'folder2/file1.txt',
    'folder1/subfolder1/file1.txt',
    'folder1/subfolder2/file2.txt',
    'file1.txt',
    'file3.txt',
    'folder1/subfolder2/file1.txt',
];

$tree = [];
foreach ($files as $file) {
    $a = explode('/', $file);
    $array = &$tree;
    foreach (array_slice($a, 0, -1) as $folder) {
        if (!isset($array[$folder])) $array[$folder] = [];
        $array = &$array[$folder];
    }
    $array[] = end($a);
}
print_r($tree);