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类
Jul 15 PHP
php SQL之where语句生成器
Mar 24 PHP
php 攻击方法之谈php+mysql注射语句构造
Oct 30 PHP
php Static关键字实用方法
Jun 04 PHP
PHP文件锁函数flock()详细介绍
Nov 18 PHP
php实现改变图片直接打开为下载的方法
Apr 14 PHP
php编程每天必学之验证码
Mar 03 PHP
PHP框架Laravel插件Pagination实现自定义分页
Apr 22 PHP
Laravel搭建后台登录系统步骤详解
Jul 26 PHP
PHP版微信小店接口开发实例
Nov 12 PHP
php验证码生成器
May 24 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 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
2006/12/14 PHP
用PHP实现维护文件代码
2007/06/14 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
PHP用swoole+websocket和redis实现web一对一聊天
2019/11/05 PHP
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
Python写的Socks5协议代理服务器
2014/08/06 Python
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
简单了解python单例模式的几种写法
2019/07/01 Python
python实现ftp文件传输功能
2020/03/20 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
网站开发实习生的自我评价
2013/12/11 职场文书
英文自荐信常用句子
2014/03/26 职场文书
毕业生求职信范文
2014/06/29 职场文书
教师自查自纠材料
2014/10/14 职场文书
JavaScript实现栈结构详细过程
2021/12/06 Javascript