Php 从扫描的目录(包括子目录)打印html列表
我正在尝试从扫描的目录(包括子目录)创建导航列表。 我想要的是一个导航列表,将包括该文件。此外,当单击目录以包含自定义目录文件时 以下是我所取得的成就 1使用递归函数扫描目录和子目录,并打印html列表 2使用递归函数扫描目录和子目录以获取文件路径 3请求页面变量并将页面值与名称值匹配,然后将路径合并到文件 我遇到的问题 1我无法从返回的数组中确定什么是目录,什么是文件 2我无法从循环中控制页面错误文件-返回多个404 选择目录 $dir='pages'Php 从扫描的目录(包括子目录)打印html列表,php,list,recursion,Php,List,Recursion,我正在尝试从扫描的目录(包括子目录)创建导航列表。 我想要的是一个导航列表,将包括该文件。此外,当单击目录以包含自定义目录文件时 以下是我所取得的成就 1使用递归函数扫描目录和子目录,并打印html列表 2使用递归函数扫描目录和子目录以获取文件路径 3请求页面变量并将页面值与名称值匹配,然后将路径合并到文件 我遇到的问题 1我无法从返回的数组中确定什么是目录,什么是文件 2我无法从循环中控制页面错误文件-返回多个404 选择目录 $dir='pages' function listFolderF
function listFolderFiles($dir){
$files = scandir($dir);
# place value home in first position of array
$home = 'home.php';
$search_home = array_search($home, $files);
if ($search_home > 0) {
unset($files[$search_home]);
array_unshift($files, $home);
}
echo "<ul class='cf nav nav--horiz'>";
foreach($files as $file){
# remove extension from files
$parts = pathinfo($file);
$name = $parts['filename'];
# remove underscore from file name and replace with space.
$search = array('_' ,'-');
$replace = " ";
$str_name = str_replace($search, $replace, $name);
if($file != '.' && $file != '..'){
echo '<li>'.'<a href="?page='.$name.'">'.$str_name.'</a>';
if(is_dir("$dir/$file")){ listFolderFiles("$dir/$file"); }
echo "</li>";
}
}
echo '</ul>';
} # end function
function find_all_files($dir) {
$root = scandir($dir);
foreach($root as $value) {
if($value === '.' || $value === '..') {continue;}
if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;}
foreach(find_all_files("$dir/$value") as $value){
$result[]=$value;
}
}
return $result;
} # end function
# call the function and print inside nav
echo "<nav class='navBar'>";
listFolderFiles($dir);
echo "</nav>";
# call the function and pass the result to array
$allFiles = find_all_files($dir);
# check the query string to see if page is set
$page = isset($_REQUEST['page']) ? $_REQUEST['page'] : '';
# loop through and match the page var with array value
foreach ($allFiles as $file) {
# remove extension from files
$parts = pathinfo($file);
$name = $parts['filename'];
if($page == $name) {
include($file);
}
}
看一看这张照片。这可能对你有帮助。我不会遍历所有dir条目,先将它们存储在一个数组中,然后再循环遍历该数组。只需在第一次迭代中正确地完成所有工作,就可以获得此时所需的所有信息。是的,我知道在创建列表时会出现重复,但我不确定如何从返回的数组创建嵌套列表。递归函数以循环中的子dir为目标,并将a包装在循环中。当使用返回的多维数组时,我无法使用is_dir???进行测试???或者我应该使用is_数组进行测试,因为可以假设is_dir将生成一个新数组。