php scandir遍历,PHP scandir递归

这篇博客讨论了如何使用PHP的scandir函数递归地遍历目录结构,并展示了一个创建树形视图列表的方法。通过提供一个递归函数,作者展示了如何在不重复代码的情况下实现这一目标,同时给出了如何根据需要处理和组织返回的数据。解决方案包括一个名为scanDir的功能,用于递归扫描目录,以及一个名为assetsMap的功能,用于构建整个目录树。最后,给出了一个使用这些函数的例子和实际输出。
摘要由CSDN通过智能技术生成

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

$files = scandir('/dir');

foreach($files as $file){

if(is_dir($file)){

echo '

'.$file.'';

$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

我真正需要的是:

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

等等,谢谢你已经发布的答案!

解决方法:

您可以通过这种方式递归扫描目录,目标是您最顶级的目录:

function scanDir($target) {

if(is_dir($target)){

$files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned

foreach( $files as $file )

{

scanDir( $file );

}

}

}

您可以轻松地根据需要调整此功能.

例如,如果要使用它来删除目录及其内容,您可以执行以下操作:

function delete_files($target) {

if(is_dir($target)){

$files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned

foreach( $files as $file )

{

delete_files( $file );

}

rmdir( $target );

} elseif(is_file($target)) {

unlink( $target );

}

你不能以你的方式做到这一点.

以下函数递归地获取所有目录,子目录以及它们的内容:

function assetsMap($source_dir, $directory_depth = 0, $hidden = FALSE)

{

if ($fp = @opendir($source_dir))

{

$filedata = array();

$new_depth = $directory_depth - 1;

$source_dir = rtrim($source_dir, '/').'/';

while (FALSE !== ($file = readdir($fp)))

{

// Remove '.', '..', and hidden files [optional]

if ( ! trim($file, '.') OR ($hidden == FALSE && $file[0] == '.'))

{

continue;

}

if (($directory_depth < 1 OR $new_depth > 0) && @is_dir($source_dir.$file))

{

$filedata[$file] = assetsMap($source_dir.$file.'/', $new_depth, $hidden);

}

else

{

$filedata[] = $file;

}

}

closedir($fp);

return $filedata;

}

echo 'can not open dir';

return FALSE;

}

将您的路径传递给该函数:

$path = 'elements/images/';

$filedata = assetsMap($path, $directory_depth = 5, $hidden = FALSE);

$filedata不是一个包含所有已创建目录和子目录及其内容的数组.这个函数可以让你扫描目录结构($directory_depth),以便除去所有无聊的隐藏文件(例如’.’,’..’)

您现在要做的就是使用返回的数组(完整的树结构)来根据需要在视图中排列数据.

你要做的事实上是一种文件管理器,你知道有很多野外,开源和免费的.

我希望这会对你有所帮助,祝你圣诞快乐.

标签:scandir,php,file

来源: https://codeday.me/bug/20191002/1844842.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值