PHP读取目录树的实现方法分析_php技巧 - PHP

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习

本文实例讲述了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文件夹结构

js文件夹下的内容

显示结果

大功告成了!目录的级别确实是这样的,不过看起来也太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常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

原文地址是:http://www.piaodoo.com/thread-3554-1-1.html

原文地址:https://www.cnblogs.com/txdah/p/12093174.html

时间: 2024-10-04 18:11:48

PHP读取目录树的实现方法分析_php技巧 - PHP的相关文章

PHP观察者模式定义与用法实例分析_php技巧 - PHP

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 本文实例讲述了PHP观察者模式定义与用法.分享给大家供大家参考,具体如下: 我理解的观察者模式就是,当我们触发一个事件的时候,想要把这个操作告诉给我想要告诉的对象,让他们都执行这个操作,就是将他们绑定到这个事件下. 1.定义一个基类(用于添加观察者也就是我想要通知的对象,还有通知观察者) EventGenerator.php <?php abstract class EventGenerator { //存储观察者,

php读取目录及子目录下所有文件名的方法

为了便于操作,先将php读取目录及子目录下所有文件名的方法封装成一个类. // +---------------------------------------------------------------------- // | lidequan [ I CAN DO IT JUST WORK HARD ] // +---------------------------------------------------------------------- // | Copyright (c)

C#读取二进制文件方法分析

本文较为详细的分析了C#读取二进制文件方法.分享给大家供大家参考.具体分析如下: 当想到所有文件都转换为 XML时,确实是一件好事.但是,这并非事实.仍旧还有大量的文件格式不是XML,甚至也不是ASCII.二进制文件仍然在网络中传播,储存在磁盘上,在应用程序之间传递.相比之下,在处理这些问题方面,它们比文本文件显得更有效率些. 在 C 和 C++ 中,读取二进制文件还是很容易的.除了一些开始符(carriage return)和结束符(line feed)的问题,每一个读到C/C++中的文件都是

第十九节: 结合【表达式目录树】来封装EF的BaseDal层的方法

一. 简介 该章节,可以说是一个简单轻松的章节,只要你对Expression表达式树.EF的基本使用.泛型有所了解,那么本章节实质上就是一个非常简单的封装章节,便于我们快捷开发. PS:在该章节对于EF的DB上下文怎么处理,怎么来的,不做介绍,在后续的框架篇将详细介绍. 如果你对Expression.EF的增删改查.泛型生疏的话,可以先阅读以下章节: (1). Expression表达式目录树:http://www.cnblogs.com/yaopengfei/p/7486870.html (2

MPC8313ERDB在Linux从NAND FLASH读取UBoot环境变量的代码分析

[email protected] 一.故事起因 因为文件系统的增大,已经大大的超出了8MB的NOR FLASH,而不得不把内核,文件系统和设备树文件保存到NAND FLASH上.但是因为使用的是RAMDISK,而无法保存一些个别的配置和参数,最简单的需要就是设置系统的IP了,,, 要使用统一的RAMDISK,而实现LINUX启动之后,设置成不能的参数功能,比较方便的就是从UBOOT把这些参数传递过去,这个得到了大家的认证,我们可以直接添加启动参数,然后在内核里面读出来,这种方法比较方法,唯一不

在Asp.net core使用配置Json创建动态目录树

一.前言 使用动态目录树可以使左边栏中的目录更加灵活,本文介绍如何将目录保存在json配置文件中,再读取出来经过处理后生成目录树. 二.数据结构 1. TreeMenuNode类名 将TreeMenuNode类设置成与json格式相对应,注意Children应为List类型.目录的内容包括MenuName,Action,Controller,Icon public class TreeMenuNode2 { public int MenuNumber { get; set; } public s

php模拟登陆的两种实现方法分析

php模拟登陆的实现方法分析 本文实例分析了php模拟登陆的实现方法.分享给大家供大家参考.具体分析如下: php模拟登陆的实现方法,这里分别列举两种方法实现模拟登陆人人网.具体实例代码如下: 1)使用snoopy模拟登陆: [php] view plaincopy<?php set_time_limit(0); require "Snoopy.class.php"; $snoopy=new Snoopy(); $snoopy->referer='http://www.la

dnspy的详细配置,dnspy如何过滤反编译之后的乱码,dnspy如何反编译表达式目录树

dnSpy应该是目前使用最多的.net反编译工具.很多情况下反编译C#代码非常方便,特别是查找基类,子类.搜索一些class,方法.接口,非常方便.比ILspy好很多.而且dnspy是可以配置的. 如果要dnSpy非常干净地显示反编译之后的代码,可以看我具体的配置: 第一张是效果图,过滤一个具体的关键词筛选的时候可以使用[全词匹配],可以在所有的.net framework中查找你需要寻找的那个关键字,不区分大小写. 右侧底部的这个搜索框是可以配置的,而且有时候很容易被隐藏掉,需要"上拉&quo

.Net工具类--表达式目录树解析DataReader和DataTable

一.概述 在项目中经常会使用SQL去操作数据库,在读取数据的时候返回结果一般是DataReader和DataSet,其中DataaSet里面可以包含多个DataTable. 读取到数据之后,一般情况下,我们需要把DataReader和DataSet解析成另外的数据实体和数据集合,有人会选择反射.硬编码,这些都是解决方案, 其实还有其他的解决方案,那就是表达式目录树. 二.解析DataReader 这个是生成表达式的方法. /// <summary> /// SqlDataReader生成表达式