Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从扫描的目录(包括子目录)打印html列表_Php_List_Recursion - Fatal编程技术网

Php 从扫描的目录(包括子目录)打印html列表

Php 从扫描的目录(包括子目录)打印html列表,php,list,recursion,Php,List,Recursion,我正在尝试从扫描的目录(包括子目录)创建导航列表。 我想要的是一个导航列表,将包括该文件。此外,当单击目录以包含自定义目录文件时 以下是我所取得的成就 1使用递归函数扫描目录和子目录,并打印html列表 2使用递归函数扫描目录和子目录以获取文件路径 3请求页面变量并将页面值与名称值匹配,然后将路径合并到文件 我遇到的问题 1我无法从返回的数组中确定什么是目录,什么是文件 2我无法从循环中控制页面错误文件-返回多个404 选择目录 $dir='pages' function listFolderF

我正在尝试从扫描的目录(包括子目录)创建导航列表。 我想要的是一个导航列表,将包括该文件。此外,当单击目录以包含自定义目录文件时

以下是我所取得的成就

1使用递归函数扫描目录和子目录,并打印html列表

2使用递归函数扫描目录和子目录以获取文件路径

3请求页面变量并将页面值与名称值匹配,然后将路径合并到文件

我遇到的问题

1我无法从返回的数组中确定什么是目录,什么是文件

2我无法从循环中控制页面错误文件-返回多个404

选择目录 $dir='pages'

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将生成一个新数组。