当前位置:  开发笔记 > 编程语言 > 正文

PHP scandir递归

如何解决《PHPscandir递归》经验,为你挑选了1个好方法。

我希望我的脚本以递归方式进行scandir,

$files = scandir('/dir');
foreach($files as $file){
if(is_dir($file)){
    echo '
  • '; $subfiles = scandir($rooturl.'/'.$file); foreach($subfiles as $subfile){ // and so on and on and on } echo '
  • '; } else { echo $file.'
    '; } }
  • 我想循环这个方式,对于scandir找到的每个目录,它在该目录中找到的文件夹上运行另一个scandir,

    所以dir'A'包含目录1/2/3,它现在应该scandir(1),scandir(2),scandir(3)等等,每个目录都找到了.

    如何轻松地实现这一点,而无需在每个foreach中反复粘贴代码?

    编辑:由于答案几乎与我已经尝试的一样,我会稍微更新一下这个问题.

    使用此脚本,我需要创建一个树视图列表.使用当前发布的脚本,以下get的回声发生:

    /images/dir1/file1.png
    /images/dir1/file2.png
    /images/dir1/file3.png
    /images/anotherfile.php
    /data/uploads/avatar.jpg
    /data/config.php
    index.php
    

    我真正需要的是:

      • file1.png
      • file2.png
      • file3.png
    • anotherfile.php
      • avatar.jpg
    • config.php
  • index.php
  • 等等,谢谢你已经发布的答案!



    1> Allain Lalon..:

    我知道这是一个老问题,但我写了一个更实用的版本.它不使用全局状态并使用纯函数来解决问题:

    function scanAllDir($dir) {
      $result = [];
      foreach(scandir($dir) as $filename) {
        if ($filename[0] === '.') continue;
        $filePath = $dir . '/' . $filename;
        if (is_dir($filePath)) {
          foreach (scanAllDir($filePath) as $childFilename) {
            $result[] = $filename . '/' . $childFilename;
          }
        } else {
          $result[] = $filename;
        }
      }
      return $result;
    }
    

    推荐阅读
    Life一切安好
    这个屌丝很懒,什么也没留下!
    DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
    Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有