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


Posted in PHP onMarch 22, 2019

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

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

使用PHP列出目录树!

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

解题思路:

1. 列出目录中的文件。
2. 判断是否是目录,如果是目录就继续递归。
3. 将所有文件名,存入多维数组

<?php
function recurDir($pathName)
{
  //将结果保存在result变量中
  $result = array();
  $temp = array();
  //判断传入的变量是否是目录
  if(!is_dir($pathName) || !is_readable($pathName)) {
    return null;
  }
  //取出目录中的文件和子目录名,使用scandir函数
  $allFiles = scandir($pathName);
  //遍历他们
  foreach($allFiles as $fileName) {
    //判断是否是.和..因为这两个东西神马也不是。。。
    if(in_array($fileName, array('.', '..'))) {
      continue;
    }
    //路径加文件名
    $fullName = $pathName.'/'.$fileName;
    //如果是目录的话就继续遍历这个目录
    if(is_dir($fullName)) {
      //将这个目录中的文件信息存入到数组中
      $result[$fullName] = recurDir($fullName);
    }else {
      //如果是文件就先存入临时变量
      $temp[] = $fullName;
    }
  }
  //取出文件
  if($temp) {
    foreach($temp as $f) {
      $result[] = $f;
    }
  }
  return $result;
}
//验证一下这个函数是否好用!
$tree = recurDir('cart_ajax');
echo "<pre>";
print_r($tree);
echo "</pre>";
?>

cart_ajax文件夹结构

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

js文件夹下的内容

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

显示结果

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

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

function beautifulTree($arr, $l = '-|')
{
  static $l = '';
  static $str = '';
  //遍历刚才得到的目录树
  foreach($arr as $key=>$val) {
    //如果是个数组,也就代表它是个目录,那么就在它的子文件中加入-|来表示是下一级吧
    if(is_array($arr[$key])) {
      $str.=$l.$key."<br/>";
      $l.='-|';
      beautifulTree($arr[$key], $l);
    }else {
      $str.=$l.$val."<br/>";
    }
  }
  $l = '';
  return $str;
}
$beautifulTree = beautifulTree($tree);
echo "<pre>";
print_r($beautiful);
echo "</pre>";

显示结果

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP模拟SQL Server的两个日期处理函数
Oct 09 PHP
Php Mssql操作简单封装支持存储过程
Dec 11 PHP
PHPMailer 中文使用说明小结
Jan 22 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
是 WordPress 让 PHP 更流行了 而不是框架
Feb 03 PHP
PHP闭包函数传参及使用外部变量的方法
Mar 15 PHP
php入门教程之Zend Studio设置与开发实例
Sep 09 PHP
PHP实现的装箱算法示例
Jun 23 PHP
PHP中的self关键字详解
Jun 23 PHP
PHP实现两种排课方式
Jun 26 PHP
针对PHP开发安全问题的相关总结
Mar 22 #PHP
浅谈PHP中的Trait使用方法
Mar 22 #PHP
PHP观察者模式定义与用法实例分析
Mar 22 #PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 #PHP
PHP中$GLOBALS与global的区别详解
Mar 21 #PHP
PHP压缩图片功能的介绍
Mar 21 #PHP
PHP应用跨时区功能的实现方法
Mar 21 #PHP
You might like
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
2019/05/07 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
Python导入oracle数据的方法
2015/07/10 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
python assert的用处示例详解
2019/04/01 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
标准的毕业生自荐信
2014/04/20 职场文书
求职信名称怎么写
2014/05/26 职场文书
档案工作个人总结
2015/03/03 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
商场广播稿范文
2015/08/19 职场文书
创业计划书之面包店
2019/09/17 职场文书
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android