首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归树文件夹函数php不进入子文件夹

递归树文件夹函数php不进入子文件夹
EN

Stack Overflow用户
提问于 2022-03-08 10:38:40
回答 2查看 174关注 0票数 1

我目前正在开发一个php文件索引器,我需要创建一个递归函数来创建一个数组,该数组将包含父文件夹的文件和子文件夹列表,子文件夹也是包含它们的文件及其子文件夹的数组(等等)。由于这是一个学校项目,我不能使用DirectoryRecursiveIterator和它的兄弟姐妹RecursiveIterator和DirectoryIterator。我的问题是,它扫描父文件夹并找到子文件夹和文件,但不会在子文件夹中查找文件和子文件夹。

代码

代码语言:javascript
复制
<?php
    class H5AI
    {
        // Properties
        private $_tree;
        private $_path;
    
        // Construct
        public function __construct($_path)
        {
            $_tree = [];
            $parent = $_tree;
            print_r($this->getFiles($_path, $parent));
        }
    
        // Methods
        public function getPath()
        {
            return $this->_path;
        }
        public function getTree()
        {
            return $this->_tree;
        }
    
        public function getFiles($path, $parent)
        {
            //Opening the directory
            $dirHandle = opendir($path);
            while (false !== $entry = readdir($dirHandle)) {
                //If file found
                if (!is_dir($path . DIRECTORY_SEPARATOR . $entry)) {
                    array_push($parent, $entry);
                }
                // When subdirs found (ignore . & ..)
                else if (is_dir($path . DIRECTORY_SEPARATOR . $entry) && $entry !== "." && $entry !== "..") {
                    $newPath = $path . DIRECTORY_SEPARATOR . $entry;
                    $parent[$entry] = [];
                    $this->getFiles($newPath, $parent[$entry]);
                }
            }
            return $parent;
        }
    }
    // Calling function
    $h5a1 = new H5AI($argv[1]);
    
    // Command I use in the terminal
    php index.php "./test_dir"

    //Output
    Array
    (
        [sub_test_dir] => Array
        (
        )

        [0] => test.css
        [sub_test_dir2] => Array
        (
        )
        [1] => test.js
        [2] => test.html
     )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-08 11:18:09

代码语言:javascript
复制
class H5AI {

  public function __construct(string $path) {
    print_r($this->getFiles($path));
  }

  public function getFiles(string $directory): array {
    $handle = opendir($directory);
    $entries = [];
    while (true) {
      $entry = readdir($handle);
      if ($entry === false) {
        break;
      }
      $path = $directory . DIRECTORY_SEPARATOR . $entry;
      if (is_file($path) && !str_starts_with($entry, '.')) {
        $entries[] = $entry;
      } elseif (is_dir($path) && !in_array($entry, [ '.', '..', '$RECYCLE.BIN' /* add other dir names to exclude here */ ])) {
        $entries[$entry] = $this->getFiles($path);
      }
    }
    closedir($handle);
    return $entries;
  }
}
票数 0
EN

Stack Overflow用户

发布于 2022-03-08 10:58:06

您正在创建一个单独的数组,该数组包含所需内容,但未插入到父数组中。你把一切都做好了,你只需要一个小小的修正:

代码语言:javascript
复制
                //...
                else if (is_dir($path . DIRECTORY_SEPARATOR . $entry) && $entry !== "." && $entry !== "..") {
                $newPath = $path . DIRECTORY_SEPARATOR . $entry;
                $parent[$entry] = [];
                $parent[$entry] = $this->getFiles($newPath, $parent[$entry]); // <-- fix is on this line
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71393597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档