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 Pear 安装及使用
Mar 19 PHP
一些php技巧与注意事项分析
Feb 03 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
Jun 28 PHP
解析在apache里面给php写虚拟目录的详细方法
Jun 24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
Jun 26 PHP
php实现的ping端口函数实例
Nov 12 PHP
php检测url是否存在的方法
Apr 14 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 PHP
php use和include区别总结
Oct 13 PHP
PHP代码加密的方法总结
Mar 13 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 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
python处理两种分隔符的数据集方法
2018/12/12 Python
python五子棋游戏的设计与实现
2019/06/18 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
Django 设置多环境配置文件载入问题
2020/02/25 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
python里反向传播算法详解
2020/11/22 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
泰国第一在线超市:Tops
2021/02/13 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
软件测试工程师结构化面试题库
2016/11/23 面试题
大学毕业生通用求职信
2013/09/28 职场文书
酒店公关部经理岗位职责
2013/11/24 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
幼儿园小班见习报告
2014/10/31 职场文书