繁体   English   中英

PHP - 从字符串创建多维递归数组(文件/文件夹结构)

[英]PHP - Create multidimensional recursive array from string (Files/folders structure)

10年前有人问过同样的问题,但没有答案

参考: 尝试从字符串创建数组(文件/文件夹结构)

我想从存储在数据库中的文件列表中返回一个树级多维数组作为字符串。

例如,我将与工作相关的路径存储在数据库中,如下所示:

SELECT name FROM files;

... SQL Output

2021/Dec/File1.doc
2021/Dec/File2.doc
2021/Dec/File3.doc
2021/Nov/File1.doc
2021/Nov/File2.doc
2021/Nov/File3.doc
2021/Nov/File4.doc
2020/Jan/File1.doc
2020/Jan/File2.doc
2020/Jan/File3.doc

... PHP 递归数组 output 应按文件夹、子文件夹、更多子文件夹(如果存在)和文件进行分类。

-2021
--Dec
---File1.doc
---File2.doc
---File3.doc
--Nov
---File1.doc
---File2.doc
---File3.doc
---File4.doc
-2020
--Jan
---File1.doc
---File2.doc
---File3.doc

明智地实现这种性能的最佳方法是什么?

到目前为止我得到了什么...

$files = [];
foreach ($sql as $row)
{
    // Separate directories
    $separator = explode('/', $row['name']); 
    /* Output:
    Array
    (
    [0] => 2021
    [1] => Dec
    [2] => file1.doc
    )
    */

    // Find the file via regex
    if (preg_match('/[^\/]*\.(doc|txt)/', $row['name'], $o))
    {
        $row['name'] = $o[0]; //Output: file1.doc
    }
    $files[] = $row;
}

...现在我只有一个文件名,现在我也需要目录,然后从中创建一个多维数组。

我有一个解决方案给你,我希望这会有所帮助。

$files="2021/Dec/File1.doc, 
2021/Dec/File2.doc,
2021/Dec/File3.doc,
2021/Nov/File1.doc,
2021/Nov/File2.doc,
2021/Nov/File3.doc,
2021/Nov/File4.doc,
2020/Jan/File1.doc,
2020/Jan/File2.doc,
2020/Jan/File3.doc";

$files=explode(',',$files);

foreach($files as $file)
{
    $i=1;
    $paths=explode('/',$file);
    foreach($paths as $path)
    {
        for($j=0;$j<$i;++$j){
            echo '-';
        }
        echo $path;
        echo "<br/>";
        ++$i;
    }
    $i=0;
}

您可以使用您的数据库文件。 通过删除我的文件常量值并使用你的。

$files = []; foreach ($sql as $row) { // Separate directories $separator = explode('/', $row['name']); /* Output: Array ( [0] => 2021 [1] => Dec [2] => file1.doc ) */ if (preg_match('/[^\/]*\.(doc|txt)/', $row['name'])) { $node = &$files; while (count($separator) > 1) { $folder = array_shift($separator); if (!array_key_exists($folder, $node)) { $node[$folder] = []; } $node = &$node[$folder]; } $node[] = $separator[0]; } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM