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中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
PHP设置一边执行一边输出结果的代码
Sep 30 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
PHP中防止SQL注入方法详解
Dec 25 PHP
CI框架整合smarty步骤详解
May 19 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
php array_reverse 以相反的顺序返回数组实例代码
Apr 11 PHP
PHP实现的激活用户注册验证邮箱功能示例
Jun 06 PHP
分享5个非常有用的Laravel Blade指令
May 30 PHP
php实现算术验证码功能
Dec 05 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
Jun 14 PHP
PHP 实现 WebSocket 协议原理与应用详解
Apr 22 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中explode与split的区别介绍
2012/10/03 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
PHP chr()函数讲解
2019/02/11 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
JS实现前端页面的搜索功能
2018/06/12 Javascript
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
js实现无缝轮播图
2020/03/09 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
python用字典统计单词或汉字词个数示例
2014/04/22 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
公共场所禁烟倡议书
2014/08/30 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
2014教师年度工作总结
2014/11/10 职场文书
2014年维稳工作总结
2014/11/18 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
部队个人年终总结
2015/03/02 职场文书
2019个人工作总结
2019/06/21 职场文书