我有这个数组:
Array
(
[0] => index.html
[libraries] => Array
(
[0] => benchmark.html
[1] => config.html
[database] => Array
(
[0] => active_record.html
[1] => binds.html
[hey] => Array
(
[0] => test.html
)
)
[2] => email.html
)
)
这是一个表示文件夹(数组)和文件(.html)树的数组。我希望在我的页面上显示所有.html文件,其路径如下:
index.html
libraries/benchmark.html
libraries/config.html
libraries/database/active_records.html
libraries/database/binds.html
libraries/database/hey/test.html
libraries/email.html
这是我的功能,但我无法显示父键名称:
private function map_dirs($dirs) {
$dirs_list = array();
$i = 0;
$keys = array_keys($dirs);
foreach($dirs as $dir) {
if(is_array($dir))
$dirs_list = array_merge($dirs_list, $this->map_dirs($dir));
else
$dirs_list[] = $keys[$i].'/'.$dir;
$i++;
}
return $dirs_list;
}
有什么想法吗?
答案 0 :(得分:2)
好吧,在函数中添加一个名为$ dirName的可选键,然后将current-dir-name作为新参数传递给递归部分。
像这样:
public function map_dirs($dirs, $dirName='') {
$dirs_list = array();
foreach($dirs as $key=>$file) {
if(is_array($file)) {
$dirs_list = array_merge($dirs_list, $this->map_dirs($file, $dirName.$key.'/'));
} else {
$dirs_list[] = $dirName.$file;
}
}
return $dirs_list;
}
答案 1 :(得分:1)
从PHP 5开始,您可以使用recursiveDirectoryIterator和FileInfo对象来获取html文件的路径和exacly扩展。例如。在这种情况下,我预先使用php扩展文件进行模拟,但你可以使用html。
function getPath($extension, $path){
$directory = new \RecursiveDirectoryIterator($path);
$iterator = new \RecursiveIteratorIterator($directory);
$files = array();
foreach ($iterator as $info) {
$ext = $info->getExtension();
if($ext === $extension){
$files[$info->getBasename()] = $info->getPathname();
}
}
return $files;
}
$array = getPath('php', __DIR__);
echo '<pre>';
print_r($array);
echo '</pre>';
这是带有php扩展文件的输出:
Array
(
[index.php] => /var/www/system/framework/index.php
[model_register.class.php] => /var/www/system/framework/sqls/mysql/model_register.class.php
[model.login.php] => /var/www/system/framework/sqls/mysql/model.login.php
[model_session.class.php] => /var/www/system/framework/sqls/mysql/model_session.class.php
[model_logs.class.php] => /var/www/system/framework/sqls/mysql/model_logs.class.php
[model_admin.class.php] => /var/www/system/framework/sqls/mysql/model_admin.class.php
)