【发布时间】:2023-11-04 01:52:01
【问题描述】:
10 年前有人问过同样的问题,但没有答案
参考:Trying to create Array from String (file/folder structure)
2022 年 1 月 8 日更新:数组和树应该是这样的:
SQL 输出应该从一个字符串形成这个数组结构。
[
'id' => $key //Increment from foreach loop,
'file' => $row['name'] //Name of folders and files
'parent_id' => 0 // 0 - if no subfolder, $id if there is subfolder
]
我想从存储在数据库中的文件列表中返回一个树级多维数组作为字符串。
例如,我将工作相关路径存储在数据库中,如下所示:
SELECT name FROM files;
...SQL 输出
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 递归数组输出应按文件夹、子文件夹、更多子文件夹(如果存在)和文件进行分类。
-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;
}
...现在我只有一个文件名,现在我还需要目录,然后从中创建一个多维数组。
【问题讨论】:
-
@CarySwoveland 你好。是的,但是我不想将子文件夹名称作为数组键,而是将其作为 parent_id => 'subfolder' 然后列出所有文件。像这样:*.com/questions/29384548/…
-
添加到顶部数组和函数如何将数据库中的字符串形成数组。
-
我假设——我不应该这样做——PHP 数组与其他语言中的数组几乎相同。我为我无端的转移道歉。