PHP读取目录树的实现方法分析

本文实例讲述了PHP读取目录树的实现方法,分享给大家供大家参考,具体如下:

前一阵时间面试XX公司笔试题中竟然有这样一道题:

使用PHP列出目录树!

当时一看就懵逼了!基本的思路还是有的,不过是使用递归算法,但对PHP操作目录文件的方法却不是很了解,所以今天好好补习一下!

解题思路:

1. 列出目录中的文件。

2. 判断是否是目录,如果是目录就继续递归。

3. 将所有文件名,存入多维数组

  1. <?php
  2. function recurDir($pathName)
  3. {
  4. //将结果保存在result变量中
  5. $result = array();
  6. $temp = array();
  7. //判断传入的变量是否是目录
  8. if(!is_dir($pathName) || !is_readable($pathName)) {
  9. return null;
  10. }
  11. //取出目录中的文件和子目录名,使用scandir函数
  12. $allFiles = scandir($pathName);
  13. //遍历他们
  14. foreach($allFiles as $fileName) {
  15. //判断是否是.和..因为这两个东西神马也不是。。。
  16. if(in_array($fileName, array('.', '..'))) {
  17. continue;
  18. }
  19. //路径加文件名
  20. $fullName = $pathName.'/'.$fileName;
  21. //如果是目录的话就继续遍历这个目录
  22. if(is_dir($fullName)) {
  23. //将这个目录中的文件信息存入到数组中
  24. $result[$fullName] = recurDir($fullName);
  25. }else {
  26. //如果是文件就先存入临时变量
  27. $temp[] = $fullName;
  28. }
  29. }
  30. //取出文件
  31. if($temp) {
  32. foreach($temp as $f) {
  33. $result[] = $f;
  34. }
  35. }
  36. return $result;
  37. }
  38. //验证一下这个函数是否好用!
  39. $tree = recurDir('cart_ajax');
  40. echo "<pre>";
  41. print_r($tree);
  42. echo "</pre>";
  43. ?>

cart_ajax文件夹结构

PHP读取目录树的实现方法分析

js文件夹下的内容

PHP读取目录树的实现方法分析

显示结果

PHP读取目录树的实现方法分析

大功告成了!目录的级别确实是这样的,不过看起来也太low了吧!稍微美化一下吧!

  1. function beautifulTree($arr, $l = '-|')
  2. {
  3. static $l = '';
  4. static $str = '';
  5. //遍历刚才得到的目录树
  6. foreach($arr as $key=>$val) {
  7. //如果是个数组,也就代表它是个目录,那么就在它的子文件中加入-|来表示是下一级吧
  8. if(is_array($arr[$key])) {
  9. $str.=$l.$key."<br/>";
  10. $l.='-|';
  11. beautifulTree($arr[$key], $l);
  12. }else {
  13. $str.=$l.$val."<br/>";
  14. }
  15. }
  16. $l = '';
  17. return $str;
  18. }
  19. $beautifulTree = beautifulTree($tree);
  20. echo "<pre>";
  21. print_r($beautiful);
  22. echo "</pre>";

显示结果

PHP读取目录树的实现方法分析