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 相关文章推荐
简单采集了yahoo的一些数据
Feb 14 PHP
java EJB 加密与解密原理的一个例子
Jan 11 PHP
PHP解码unicode编码的中文字符代码分享
Aug 13 PHP
php实现压缩多个CSS与JS文件的方法
Nov 11 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
php实现简单的MVC框架实例
Sep 23 PHP
php实现购物车功能(上)
Jul 23 PHP
PHP仿微信发红包领红包效果
Oct 30 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
Mar 31 PHP
php 7新特性之类型申明详解
Jun 06 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
PHP设计模式(观察者模式)
Jul 07 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中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
js css样式操作代码(批量操作)
2009/10/09 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
node中的session的具体使用
2018/09/14 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
Python Cookie 读取和保存方法
2018/12/28 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
pycharm实现猜数游戏
2020/12/07 Python
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
法警的竞聘演讲稿
2014/01/02 职场文书
我为自己代言广告词
2014/03/18 职场文书
委托公证书
2014/04/08 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
招标授权委托书样本
2014/09/23 职场文书
给病人的慰问信
2015/03/23 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
MySQL派生表联表查询实战过程
2022/03/20 MySQL