У меня есть функция, которая будет получать все каталоги и файлы из заданного каталога, однако способ их получения усложняет работу с:
function getFileLists($dir, $recursive=FALSE) {
// retrieve an array of all the directories and files in a certain directory
$retval = [];
if (substr($dir, -1) !== "/") {
$dir .= "/";
}
$d = @dir($dir) or die("unable to open {$dir} for reading, permissions?");
while(FALSE !== ($entry = $d->read())) {
if ($entry{0} === ".") { continue; }
if (is_dir("{$dir}{$entry}")) {
$retval[] = [
'name' => "{$dir}{$entry}",
'last_modified' => filemtime("{$dir}{$entry}")
];
if($recursive && is_readable("{$dir}{$entry}/")) {
$retval = array_merge($retval, getFileLists("{$dir}{$entry}/", TRUE));
}
} elseif (is_readable("{$dir}{$entry}")) {
$retval[] = [
'name' => "{$dir}{$entry}",
'last_modified' => filemtime("{$dir}{$entry}")
];
}
}
$d->close();
return $retval;
}
Когда вы запускаете это надля данного каталога он даст следующие результаты:
array(14) {
[0]=>
array(2) {
["name"]=>
string(15) "./kb_data/admin"
["last_modified"]=>
int(1543591247)
}
[1]=>
array(2) {
["name"]=>
string(28) "./kb_data/admin/testfile.txt"
["last_modified"]=>
int(1543591238)
}
...
}
Это замечательно, но из-за этого довольно сложно работать с тем, как я хочу отобразить этот каталог как tree
.На самом деле я хочу сделать что-то вроде следующего:
array(14) {
[0]=>
array(3) {
["name"]=>
string(16) "./kb_data/shared"
["last_modified"]=>
int(1543591258)
["files"] => array(#) {
["name"]=>
string(29) "./kb_data/shared/testfile.txt"
["last_modified"]=>
int(1543591238)
}
}
...
}
Как вы можете видеть, я хочу, чтобы каждый файл в каталоге находился внутри каталога.Как я могу провести рефакторинг этой функции, чтобы получить желаемый результат?