我有以下路径列表
- GRUPA131/LFA & others/lfa sub.zip
- GRUPA131/LFA & others/lfandrei.pdf
- GRUPA131/Limbaje formale (Liviu Dinu(.pdf
- GRUPA131/桌面.ini
- GRUPA131/lfa/lab1/1-Theodors MacBook Air.cc
- GRUPA131/lfa/lab1/1.cc
- GRUPA131/lfa/lab1/1.cc-Theodors MacBook Air.out
- GRUPA131/lfa/lab1/1.cc.out
- GRUPA131/lfa/lab1/2.cc
- GRUPA131/lfa/lab1/input3.in
- GRUPA131/LFA/Lab1/tema1.zip
- 亚历山德鲁-兰巴.png
- 亚历山德鲁-lamba_v2.png
- 安娜丽莎菜单 1.pdf
- 安娜丽莎菜单 2.pdf
- 藏书.docx
- 居中.js
作为字符串,我想将它们转换为可使用 HMTL 表示的文件夹层次结构。因此,对于每个文件夹,我想列出它的文件和子文件夹,依此类推,直到列表完成。
最好将 php 数组层次结构如下所示:
$dirs['dirname'] -> file 1
$dirs['dirname'] -> file 2
$dirs['dirname'] -> file 3
$dirs['dirname'] -> Folder
$dirs['dirname']['folder'] -> file 1
$dirs['dirname']['folder'] -> file 2..
我试图按'/'
(PATH_DELIMITER
(拆分每个字符串,但我无法弄清楚如何像我之前提到的那样实际获得一个数组。
此外,我的数组具有整个路径,是一个简单的数组。不关联之类的。
有人可以帮我弄清楚如何做到这一点吗?
谢谢!
最简单的方法是递归函数。我的建议:
function build_folder_structure(&$dirs, $path_array) {
if (count($path_array) > 1) {
if (!isset($dirs[$path_array[0]])) {
$dirs[$path_array[0]] = array();
}
build_folder_structure($dirs[$path_array[0]], array_splice($path_array, 1));
} else {
$dirs[] = $path_array[0];
}
}
$strings = array(
'GRUPA131/LFA & others/lfa sub.zip',
'GRUPA131/LFA & others/lfandrei.pdf',
'GRUPA131/Limbaje formale (Liviu Dinu).pdf',
'GRUPA131/desktop.ini',
'GRUPA131/lfa/lab1/1-Theodors MacBook Air.cc',
'GRUPA131/lfa/lab1/1.cc',
'GRUPA131/lfa/lab1/1.cc-Theodors MacBook Air.out',
'GRUPA131/lfa/lab1/1.cc.out',
'GRUPA131/lfa/lab1/2.cc',
'GRUPA131/lfa/lab1/input3.in',
'GRUPA131/lfa/lab1/tema1.zip',
'alexandru-lamba.png',
'alexandru-lamba_v2.png',
'analiza carte 1.pdf',
'analiza carte 2.pdf',
'biblsit.docx',
'center.js'
);
$dirs = array();
foreach ($strings As $string) {
$path_array = explode('/',$string);
build_folder_structure($dirs,$path_array);
}
print_r($dirs);
检查:
什么是 PHP 中的递归函数?
http://php.net/manual/en/language.references.pass.php