我将尝试将目录结构转化为多维数组。
我已经完成了以下步骤:
我已经完成了以下步骤:
function dirtree($dir, $regex = '', $ignoreEmpty = false)
{
if (!$dir instanceof DirectoryIterator) {
$dir = new DirectoryIterator((string) $dir);
}
$dirs = array();
$files = array();
foreach ($dir as $node) {
if ($node->isDir() && !$node->isDot()) {
$tree = dirtree($node->getPathname(), $regex, $ignoreEmpty);
if (!$ignoreEmpty || count($tree)) {
$dirs[$node->getFilename()] = $tree;
}
} elseif ($node->isFile()) {
$name = $node->getFilename();
if ('' == $regex || preg_match($regex, $name)) {
$files[] = $name;
}
}
}
asort($dirs);
sort($files);
return array_merge($dirs, $files);
}
但是我在获取文件夹名称时遇到了问题,而不是索引0,1等。 这似乎是由于我的目录具有数字名称导致的?
Array
(
[0] => Array // 0 should be the folder name
(
[0] => m_109225488_1.jpg
[1] => t_109225488_1.jpg
)
[1] => Array
(
[0] => m_252543961_1.jpg
[1] => t_252543961_1.jpg
)
var_dump
$dirs
,$files
和期望的输出吗? - Prafulla Kumar Sahuarray_merge
怎么会不起作用呢?当我运行你的代码时,我得到了按名称键入的目录,就像预期的那样。array_merge
应该保留字符串键... - Roger Geearray_merge()
的情况下,数字键将在合并过程中递增。这意味着您可以通过检查映射值是标量还是数组来检测目录与常规文件之间的区别。例如,如果读取到目录0
,那么第一个文件将被键入1
。您可以通过检查$result[0]
是否为数组或标量来区分它们。 - Roger Gee