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相关资料
Oct 09 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 PHP
php若干单维数组遍历方法的比较
Sep 20 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
领悟php接口中interface存在的意义
Jun 27 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
浅谈php冒泡排序
Dec 30 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
php用户登录之cookie信息安全分析
May 13 PHP
php判断用户是否关注微信公众号
Jul 22 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 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中常用字符串处理代码片段整理
2011/11/07 PHP
Yii2如何批量添加数据
2016/05/17 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
2014/03/20 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
Python 条件判断的缩写方法
2008/09/06 Python
Python函数中定义参数的四种方式
2014/11/30 Python
给Python入门者的一些编程建议
2015/06/15 Python
Python简明入门教程
2015/08/04 Python
Python中的id()函数指的什么
2017/10/17 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
简述 Python 的类和对象
2020/08/21 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
网络技术专业求职信
2014/02/18 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书