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 相关文章推荐
使用php4加速网络传输
Oct 09 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
php数组函数序列之array_keys() - 获取数组键名
Oct 30 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
Feb 14 PHP
浅析php header 跳转
Jun 17 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
Apr 09 PHP
php实现httpRequest的方法
Mar 13 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
Yii中CGridView禁止列排序的设置方法
Jul 12 PHP
PHP递归获取目录内所有文件的实现方法
Nov 01 PHP
php观察者模式应用场景实例详解
Feb 03 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
Oct 17 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 mkdir()定义和用法
2009/01/14 PHP
php图片上传存储源码并且可以预览
2011/08/26 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
JS 统计时间
2021/03/09 Javascript
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
Python补齐字符串长度的实例
2018/11/15 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
python 安装移动复制第三方库操作
2020/07/13 Python
Python使用Pygame绘制时钟
2020/11/29 Python
python通过cython加密代码
2020/12/11 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
高职助产应届生自荐信
2013/09/24 职场文书
四年大学自我鉴定
2014/02/17 职场文书
工会文体活动总结
2015/05/07 职场文书