PHP scandir 递归

标签 php file scandir

我希望我的脚本递归地 scandir,

$files = scandir('/dir');
foreach($files as $file){
if(is_dir($file)){
    echo '<li><label class="tree-toggler nav-header"><i class="fa fa-folder-o"></i>'.$file.'</label>';
    $subfiles = scandir($rooturl.'/'.$file);
        foreach($subfiles as $subfile){
            // and so on and on and on
        }
        echo '<li>';
    } else {
        echo $file.'<br />';
    }
}

我想以一种方式循环它,对于 scandir 找到的每个目录,它在该目录中找到的文件夹上运行另一个 scandir,

所以目录“A”包含目录 1/2/3,它现在应该是 scandir(1)、scandir(2)、scandir(3) 对找到的每个目录依此类推。

如何在不在每个 foreach 中一遍又一遍地复制粘贴代码的情况下轻松实现这一点?

编辑:由于答案与我已经尝试过的几乎完全相同,我将稍微更新一下问题。

使用此脚本,我需要创建一个 TreeView 列表。使用当前发布的脚本,会发生以下 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

我真正需要的是:

<li><label>images</label>
    <ul>
        <li><label>dir1</label>
            <ul>
                <li>file1.png</li>
                <li>file2.png</li>
                <li>file3.png</li>
            </ul>
        </li>
        <li>anotherfile.php</li>
    </ul>
</li>
<li><label>data</label>
    <ul>
        <li><label>uploads</label>
            <ul>
                <li>avatar.jpg</li>
            </ul>
        </li>
        <li>config.php</li>
    </ul>
</li>
<li>index.php</li>

等等,感谢您已经发布的答案!

最佳答案

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

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;
}

关于PHP scandir 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55050942/

相关文章:

bash - 在 awk 中在文件中搜索时使用变量作为搜索模式时面临的问题

c - 操作系统 X : trouble with dirent struct attribute of scandir() function

PHP mPDF 将文件另存为 PDF

php - 在 php 中为 000webhost.com 启用curl 扩展

php - 如何为已安装的 Ubuntu LAMP 堆栈启用 cURL?

java - 当它是java中的可执行文件时如何写入文件

java - 读取文件添加到文件夹的时间

php - Scandir 在 Joomla 中不起作用

python - Python 中 os.scandir() 目录树中的条目(文件和文件夹)列表

php - Mysql选择除第一行和最后一行以外的所有内容