php 获取文件夹列表,PHP读取文件夹文件列表(可多级读取) | kTWO-个人博客

今天想起了前几天写的一个php读取文件夹内文件列表的并返回文件路径的方法,因为前段时间用的时候只需读取两级目录,就随便写了一个,今天又彻底完善了一下,可直接递归读取文件夹内的文件夹,最终返回一维数组。当时在写这段程序的时候出现了乱码的现象。但当时已经对传进的参数进行了转码,并且可正常打印,但存到数组中之后却显示空白,经过仔细调试终于解决。

算法实现说明:

该算法核心是读取文件夹内的文件,若发现存在文件夹,就递归读取,将返回值在下面和第一级文件列表拼合,但这样最终的返回值是一个N维数组,N由文件夹的目录级数决定,所以,对返回值又进行了处理,将N维数组遍历返回一维数组。需要注意的是文件夹路径的转码问题,因为计算机读取文件夹的时候不认识中文汉字的utf8编码,所以每次中文路径都必须转为gb2312,此时计算机才认识。

主代码:

/*

*php读取文件夹内文件及文件夹

*参数:文件夹路径$dir,格式要求:文件夹名称后必须有“/”

*返回值:含有文件名称和路径的一维数组

*作者:kTWO

*时间:2016-12-10 15:46:25

*网址:https://www.k2zone.cn/

*/

function read($dir){

$dir_tem=$dir;      //用于最终的路径拼接,解决乱码和不显示的bug

$dir=iconv('utf-8', 'gb2312', $dir);    //对参数路径进行gb2312转码

$data=scandir("$dir");    //返回指定目录中的文件和目录的数组。

$file_arr=array();        //暂存文件列表

$dir_arr=array();         //暂存文件夹内的文件列表

foreach($data as $file) {

if(is_dir($dir.$file) && $file!='.' && $file!='..'){    //判断是否是文件夹内的文件夹

$file = iconv('gb2312' , 'utf-8' , $file);    //对中文的文件夹进行转码

$dir_arr[]=read($dir.$file."/");      //递归读取文件夹内的文件

}else{

$file=iconv('gb2312' , 'utf-8' , $file );     //讲文件名转换为utf8编码,防止乱码

$dir=iconv('gb2312' , 'utf-8' , $dir );

if($file!='.' && $file!='..') {     //过滤

$file_arr[]=$dir_tem.$file;}        //进行路径拼接

}

}

$allFile = array_merge($file_arr,$dir_arr);   //拼合数组

return $allFile;

}

function rebuild_array($arr){  //将多维数组变为一维数组

static $tmp=array();      //此处为静态变量,防止递归的时候数据丢失

for($i=0; $i

if(is_array($arr[$i])) rebuild_array($arr[$i]);  //递归

else $tmp[]=$arr[$i];

}

return $tmp;

}

function getFile($arr){

$data=read($arr);

return rebuild_array($data);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

/*

*php读取文件夹内文件及文件夹

*参数:文件夹路径$dir,格式要求:文件夹名称后必须有“/”

*返回值:含有文件名称和路径的一维数组

*作者:kTWO

*时间:2016-12-10 15:46:25

*网址:https://www.k2zone.cn/

*/

functionread($dir){

$dir_tem=$dir;     //用于最终的路径拼接,解决乱码和不显示的bug

$dir=iconv('utf-8','gb2312',$dir);   //对参数路径进行gb2312转码

$data=scandir("$dir");   //返回指定目录中的文件和目录的数组。

$file_arr=array();       //暂存文件列表

$dir_arr=array();        //暂存文件夹内的文件列表

foreach($dataas$file){

if(is_dir($dir.$file)&&$file!='.'&&$file!='..'){   //判断是否是文件夹内的文件夹

$file=iconv('gb2312','utf-8',$file);   //对中文的文件夹进行转码

$dir_arr[]=read($dir.$file."/");     //递归读取文件夹内的文件

}else{

$file=iconv('gb2312','utf-8',$file);    //讲文件名转换为utf8编码,防止乱码

$dir=iconv('gb2312','utf-8',$dir);

if($file!='.'&&$file!='..'){    //过滤

$file_arr[]=$dir_tem.$file;}       //进行路径拼接

}

}

$allFile=array_merge($file_arr,$dir_arr);  //拼合数组

return$allFile;

}

functionrebuild_array($arr){ //将多维数组变为一维数组

static$tmp=array();     //此处为静态变量,防止递归的时候数据丢失

for($i=0;$i

if(is_array($arr[$i]))rebuild_array($arr[$i]); //递归

else$tmp[]=$arr[$i];

}

return$tmp;

}

functiongetFile($arr){

$data=read($arr);

returnrebuild_array($data);

}

运行结果:

89ce60841da503ee238ea69f0faf60cc.gif

使用时直接调用getFile()函数,传入路径参数即可。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值