【问题标题】:php - check for endless possibility and stop when reach the endphp - 检查无穷无尽的可能性并在到达终点时停止
【发布时间】:2011-07-10 08:08:41
【问题描述】:

我有一个这样的文件夹结构

css
  main.css
  home
    layout.css
    menu.css
    ...
  account
    user.css
    menu.css
      user
        user.css
        level
          time.css
          ...
        ...

您可以看到许多相互嵌套的文件和文件夹。我想遍历文件夹 css,读取其中的每个文件和文件夹。如果是文件,则运行函数 do(),如果是文件夹,则运行函数 make() 并继续循环遍历该文件夹以检查其中的文件和文件夹。重复这个过程,直到没有更多的文件夹和文件可以循环。

如果我知道文件和文件夹的确切数量,我可以轻松地循环浏览这些文件和文件夹。问题是我不知道有多少文件夹和文件。所以需要一种特殊的技术来归档我想要的东西?

【问题讨论】:

  • 您需要递归地遍历您的文件/文件夹。

标签: php logic


【解决方案1】:

这对于 PHP 附带的 RecursiveDirectorIterator 类来说是完美的。它将递归地遍历每个文件和文件夹。您迭代的每个项目都将是 SplFileInfo 的子类,其中包含许多您可以使用的函数(例如 getBasename()、getCTime()、getExtension() 等等)。

<?php 

$dir = '/path/to/folder';

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::CHILD_FIRST);

foreach ( $iterator as $path )
{
  // If it's a directory.
  if ($path->isDir())
  {
    // Do something.
  }
  else
  {
    // Do something else.
  }
}

【讨论】:

    【解决方案2】:

    想象一下,如果你有一个函数 processDir(),你可以调用它,给定一个目录将遍历该目录中的文件和文件夹。

    对于每个文件,它可能会调用 processFile(),但对于它找到的每个 目录,它都会调用自身 - 即 processDir()

    这是一个递归函数的例子,也是解决问题的一种方法。

    这是一个(未经测试!)我的意思的例子......

    function processDir($dir) {
       $d = dir($dir);
       while (false !== ($entry = $d->read())) {
           if ($entry[0]=='.')
               continue;
    
           $full=$d->path.$entry;
           if (is_dir($full))
               processDir($full); //recursive call
           else
               processFile($full);
        }
        $d->close();
    }
    

    递归函数并不是实现此目的的唯一方法,它只是一种添加到您的武器库中的技术。很容易将其更改为具有基于数组的目录队列,以顶级目录为种子,您可以处理该目录直到为空。每次遇到子目录时,都会将其推送到队列中。

    现在,希望这说明了“如何处理未知广度和深度的树”的一些有用答案。但是对于目录扫描,PHP5 提供了相当不错的 RecursiveDirectoryIterator 类,在本页的其他一些答案中对此进行了很好的探讨。

    【讨论】:

    • 哦,看我摇摆它的老派。我已经使用 PHP 十多年了,酷孩子们现在使用 RecursiveDirectorIterator :)
    • 这绝对比老式方法简单一点,但两者都一样好。 :)
    【解决方案3】:

    您可以使用递归函数(在每个目录上调用自身)或使用RecursiveDirectoryIterator 轻松实现这一点

    【讨论】:

      【解决方案4】:

      您需要使用递归算法来遍历您的文件和文件夹。请参阅here 以获取伪代码示例,该示例在 php 中实现起来应该非常简单。

      递归的基本概念是一个函数(在特定条件下)调用自身。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-16
        • 1970-01-01
        • 2014-10-09
        相关资源
        最近更新 更多