1 Star 0 Fork 20

董志强 / PHP-Markdown 接口文档管理工具

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Dir.php 3.42 KB
一键复制 编辑 原始数据 按行查看 历史
<?php
//后根序遍历目录, 读取所有子目录和文件
//张志斌 954861399@qq.com
class Dir
{
public $dir = '';
public $fileList = array();
public function __construct($dir)
{
$stack = array();
$this->dir = $dir = realpath($dir);
$currentDir = $dir.DIRECTORY_SEPARATOR;
$current = array_slice(scandir($dir), 2); //去掉 . 和 ..
if (!empty($current)) {
do {
$isOver = 1;
foreach ($current as $k => $fileName) {
if (substr($fileName, 0, 1) != '.') {
$pathName = $currentDir.$fileName;
if (is_file($pathName)) {
$this->fileList[] = $pathName;
} elseif (is_dir($pathName) && count(scandir($pathName)) > 2) {
//当前是目录, 就把其以后的数据压栈
$tmp = array_slice($current, $k+1);
$tmp['currentDir'] = $currentDir;
array_push($stack, $tmp);
$current = array_slice(scandir($pathName), 2);
$currentDir = $pathName.DIRECTORY_SEPARATOR;
$isOver = 0;
break;
}
}
}
if ($isOver) { //没有入栈, 说明当前目录里全是文件
$current = array_pop($stack);
$currentDir = $current['currentDir'];
unset($current['currentDir']);
}
} while(!empty($stack) || count($current));
}
}
//读取所有子目录和文件, $dir目录最后不要有'/'
public static function ini($dir)
{
return new self($dir);
}
//替换路径里的字符串
public function replace($target, $replace='')
{
foreach ($this->fileList as $k => $v) {
$this->fileList[$k] = str_replace($target, $replace, $v);
}
return $this;
}
//筛选获取指定的后缀
public function extension($ext)
{
foreach ($this->fileList as $k => $v) {
$extension = pathinfo($v, PATHINFO_EXTENSION);
if (strtolower($extension) != $ext) {
unset($this->fileList[$k]);
}
}
return $this;
}
//重新整理文件列表, 给每一个目录和文件标上唯一的整数id
public function attachUniqueId()
{
$list[] = array('currentId' => 1, 'preId' => -1, 'name' => 'Root');
$preId = 1; //父节点索引
$i = 2; //当前索引
$nodeIndex = array(); //已生成索引的节点
foreach ($this->fileList as $k => $srcPathName) {
$path = str_replace($this->dir, '', $srcPathName);
$arrNode = explode(DIRECTORY_SEPARATOR, ltrim($path, DIRECTORY_SEPARATOR));
if (count($arrNode) == 1) {
$list[] = array('currentId' => $i++, 'preId' => 1, 'name' => reset($arrNode), 'isEnd' => 1);
} else {
//第一个节点(第一层目录), 父节点固定为1
$firstNode = array_shift($arrNode);
if (empty($nodeIndex[$firstNode])) {
$nodeIndex[$firstNode] = $i++;
$list[] = array('currentId' => $nodeIndex[$firstNode], 'preId' => 1, 'name' => $firstNode, 'isEnd' => 0);
}
$preId = $nodeIndex[$firstNode];
//最后一个节点, url值不为空
$endNode = array_pop($arrNode);
//中间节点
if (!empty($arrNode)) {
foreach ($arrNode as $node) {
if (empty($nodeIndex[$node])) {
$nodeIndex[$node] = $i++;
$list[] = array('currentId' => $nodeIndex[$node], 'preId' => $preId, 'name' => $node, 'isEnd' => 0);
}
$preId = $nodeIndex[$node];
}
}
//最后一个节点(文件名)
$list[] = array('currentId' => $i++, 'preId' => $preId, 'name' => $endNode, 'isEnd' => 1);
}
$preId = 1;
}
}
}
PHP
1
https://gitee.com/aaajkcn/PHP-Markdown.git
git@gitee.com:aaajkcn/PHP-Markdown.git
aaajkcn
PHP-Markdown
PHP-Markdown 接口文档管理工具
master

搜索帮助