简单的数组转换为关联数组,基于“目录树",如第一个的值 [英] simple array into associative array, based on 'directory tree' like values of the first one

查看:78
本文介绍了简单的数组转换为关联数组,基于“目录树",如第一个的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如,我有数组

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
)

我需要一个线索来说明如何根据给定的值创建目录树"数组,使其看起来像这样:

I need a clue to figure how to create 'directory tree' array, based on the given values, that it could look like this:

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
)

现在,第二个数组是第一个数组的树(手动生成). =)

Now second array is a tree of the first array (made manually). =)

我不知道如何自动实现这一目标.

And I can't figure how to achieve this automatically.

推荐答案

简单示例(演示),该示例生成所需的输出,但是如果在同一目录级别具有相同的文件夹和文件名(演示).

Simples example (demo), that will generate output like you wish, but you will get conflict if you will have same folder and file name in the same directory level (demo).

$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);

要解决相同名称的文件夹和文件在同一级别上的问题,您可以在末尾创建带有斜杠的文件夹索引,例如folder/,这样就不会出现任何冲突(

To overcome problem with same folder and file named on the same level you can create folder indexes with slash at the end, like folder/, so there cannot be any conflict (demo).

这篇关于简单的数组转换为关联数组,基于“目录树",如第一个的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆