簡體   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