10年前有人問過同樣的問題,但沒有答案
參考:嘗試從字串創建陣列(檔案/檔案夾結構)
我想從存盤在資料庫中的檔案串列中回傳一個樹級多維陣列作為字串。
例如,我將與作業相關的路徑存盤在資料庫中,如下所示:
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;
}
...現在我只有一個檔案名,現在我也需要目錄,然后從中創建一個多維陣列。
uj5u.com熱心網友回復:
我有一個解決方案給你,我希望這會有所幫助。
$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;
}
您可以使用您的資料庫檔案。通過洗掉我的檔案常量值并使用你的。
uj5u.com熱心網友回復:
$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];
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/405586.html
標籤:
