PHPackages                             hizpark/directory-tree - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. hizpark/directory-tree

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

hizpark/directory-tree
======================

Elegantly transform directory structures into traversable tree objects

v1.0.2(1y ago)0311MITPHPPHP &gt;=8.2CI passing

Since May 9Pushed 1y ago1 watchersCompare

[ Source](https://github.com/changhorizon/directory-tree)[ Packagist](https://packagist.org/packages/hizpark/directory-tree)[ RSS](/packages/hizpark-directory-tree/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (6)DependenciesVersions (7)Used By (1)

Directory Tree
==============

[](#directory-tree)

> Elegantly transform directory structures into traversable tree objects

[![License](https://camo.githubusercontent.com/4ef89ed204c044f2e78bd7424ead3e9cf594bf9e42e67837ef21d23c40098708/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f68697a7061726b2f6469726563746f72792d747265653f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/4ef89ed204c044f2e78bd7424ead3e9cf594bf9e42e67837ef21d23c40098708/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f68697a7061726b2f6469726563746f72792d747265653f7374796c653d666c61742d737175617265)[![Latest Version](https://camo.githubusercontent.com/ad8d25b77bf3643a97681bf6a092446082c19fb78d0acff14dfeb76171db0e5d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f68697a7061726b2f6469726563746f72792d747265653f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/ad8d25b77bf3643a97681bf6a092446082c19fb78d0acff14dfeb76171db0e5d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f68697a7061726b2f6469726563746f72792d747265653f7374796c653d666c61742d737175617265)[![PHP Version](https://camo.githubusercontent.com/10b897c523f00fa3f8f7b54dfe73999190e622480655d5b5f011e31fc32a7111/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d382e322d2d382e342d626c75653f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/10b897c523f00fa3f8f7b54dfe73999190e622480655d5b5f011e31fc32a7111/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d382e322d2d382e342d626c75653f7374796c653d666c61742d737175617265)[![Static Analysis](https://camo.githubusercontent.com/1a477f5e7e742a33c1ff5b685167579083a26c342c4e997fe056ea4ef7bea73e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7374617469635f616e616c797369732d5048505374616e2d626c75653f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/1a477f5e7e742a33c1ff5b685167579083a26c342c4e997fe056ea4ef7bea73e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7374617469635f616e616c797369732d5048505374616e2d626c75653f7374796c653d666c61742d737175617265)[![Tests](https://camo.githubusercontent.com/72829871c802983bff15745f71c846973b36a6fea0bb5298dadaeeb690463604/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74657374732d504850556e69742d627269676874677265656e3f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/72829871c802983bff15745f71c846973b36a6fea0bb5298dadaeeb690463604/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74657374732d504850556e69742d627269676874677265656e3f7374796c653d666c61742d737175617265)[![codecov](https://camo.githubusercontent.com/f09fb1d8109e2be48f191b6cd2713385110d1aca528604c9fa9a424d7f29fcad/68747470733a2f2f636f6465636f762e696f2f67682f68697a7061726b2f6469726563746f72792d747265652f6272616e63682f6d61696e2f67726170682f62616467652e737667)](https://codecov.io/gh/hizpark/directory-tree)[![CI](https://github.com/hizpark/directory-tree/actions/workflows/ci.yml/badge.svg?style=flat-square)](https://github.com/hizpark/directory-tree/actions/workflows/ci.yml/badge.svg?style=flat-square)

This library provides object-oriented directory structure mapping and transformation capabilities for PHP applications. It converts physical filesystem hierarchies into traversable tree objects with support for multiple export formats including JSON, XML and visual representations.

✨ 特性
----

[](#-特性)

- 将实体目录结构映射为记忆中的树形结构
- 支持祖先、父代、子代、兄弟节点的查询
- 提供 Array JSON XML 多种格式输出
- 支持树形文本、缩进文本 HTML/UL 等展示格式

📦 安装
----

[](#-安装)

```
composer require hizpark/directory-tree
```

📂 目录结构
------

[](#-目录结构)

```
src
├── Builder
│   ├── DirectoryTreeBuilder.php
│   └── TreeBuilderInterface.php
├── Exception
│   └── DirectoryTreeException.php
├── Memory
│   ├── DirectoryTreeMemory.php
│   └── TreeMemoryInterface.php
├── Node
│   ├── DirectoryNode.php
│   └── NodeInterface.php
├── Transformer
│   └── DirectoryTreeTransformer.php
└── Viewer
    └── DirectoryTreeViewer.php
```

🚀 使用示例
------

[](#-使用示例)

### 示例1：基本目录树渲染

[](#示例1基本目录树渲染)

```
use Hizpark\DirectoryTree\Viewer\DirectoryTreeViewer;

$viewer = new DirectoryTreeViewer();
echo $viewer->render('/path/to/directory');
```

### 示例2：多种格式输出

[](#示例2多种格式输出)

```
use Hizpark\DirectoryTree\Viewer\DirectoryTreeViewer;

$viewer = new DirectoryTreeViewer();

// HTML列表格式
echo $viewer->render('/path/to/directory', DirectoryTreeViewer::FORMAT_HTML_LIST);
// Markdown列表格式
echo $viewer->render('/path/to/directory', DirectoryTreeViewer::FORMAT_MARKDOWN_LIST);
// 文本缩进格式
echo $viewer->render('/path/to/directory', DirectoryTreeViewer::FORMAT_TEXT_INDENTED);
// 树状文本格式(默认)
echo $viewer->render('/path/to/directory', DirectoryTreeViewer::FORMAT_TEXT_TREE);
```

📐 接口说明
------

[](#-接口说明)

### NodeInterface

[](#nodeinterface)

> 定义目录树节点的基本接口

```
namespace Hizpark\DirectoryTree\Node;

interface NodeInterface
{
    public function getPath(): string;
    public function getLocation(): string;
    public function getParent(): ?NodeInterface;
    public function addChild(NodeInterface $child): void;
    public function getChildren(): ?array;
}
```

### TreeBuilderInterface

[](#treebuilderinterface)

> 定义构建目录树结构的接口

```
namespace Hizpark\DirectoryTree\Builder;

use Hizpark\DirectoryTree\Memory\TreeMemoryInterface;
use Hizpark\DirectoryTree\Node\NodeInterface;

interface TreeBuilderInterface
{
    public function build(NodeInterface $root): TreeMemoryInterface;
}
```

### TreeMemoryInterface

[](#treememoryinterface)

> 定义目录树内存操作的接口

```
namespace Hizpark\DirectoryTree\Memory;

use Hizpark\DirectoryTree\Node\NodeInterface;

interface TreeMemoryInterface
{
    public function getRoot(): NodeInterface;
    public function getAncestors(NodeInterface $node): array;
    public function getSiblings(NodeInterface $node): array;
    public function getDescendants(NodeInterface $node): array;
}
```

🛠️ 核心类说明
--------

[](#️-核心类说明)

### DirectoryNode

[](#directorynode)

> Namespace: `Hizpark\DirectoryTree\Node`

- 实现 NodeInterface
- 代表目录树中的单个节点
- 包含路径、父节点、子节点等信息
- 自动验证路径有效性

### DirectoryTreeBuilder

[](#directorytreebuilder)

> Namespace: `Hizpark\DirectoryTree\Builder`

- 实现 TreeBuilderInterface
- 使用迭代方式构建目录树
- 自动排序文件和目录
- 支持大目录处理

### DirectoryTreeMemory

[](#directorytreememory)

> Namespace: `Hizpark\DirectoryTree\Memory`

- 实现 TreeMemoryInterface
- 提供树结构查询功能：获取祖先节点，获取兄弟节点，获取后代节点
- 使用BFS算法遍历

### DirectoryTreeTransformer

[](#directorytreetransformer)

> Namespace: `Hizpark\DirectoryTree\Transformer`

- 目录树结构转换器
- 支持多种输出格式转换： 数组，JSON，XML，HTML列表，Markdown列表，缩进文本，ASCII树状文本
- 保持原始目录结构
- 自动处理特殊字符转义

### DirectoryTreeViewer

[](#directorytreeviewer)

> Namespace: `Hizpark\DirectoryTree\Viewer`

- 提供简化的渲染接口
- 支持多种输出格式：HTML列表，Markdown列表，文本缩进，树状文本
- 内置异常处理

`DirectoryTreeViewer::render(string $path, int $format = self::FORMAT_TEXT_TREE)`

#### `$format` 可选值

[](#format-可选值)

常量名值描述DirectoryTreeViewer::FORMAT\_TEXT\_TREE1树状文本格式DirectoryTreeViewer::FORMAT\_TEXT\_INDENTED2缩进文本格式DirectoryTreeViewer::FORMAT\_MARKDOWN\_LIST3Markdown 列表格式DirectoryTreeViewer::FORMAT\_HTML\_LIST4HTML 列表格式> 默认值： `DirectoryTreeViewer::FORMAT_TEXT_TREE`

🔍 静态分析
------

[](#-静态分析)

使用 PHPStan 工具进行静态分析，确保代码的质量和一致性：

```
composer stan
```

🎯 代码风格
------

[](#-代码风格)

使用 PHP-CS-Fixer 工具检查代码风格：

```
composer cs:chk
```

使用 PHP-CS-Fixer 工具自动修复代码风格问题：

```
composer cs:fix
```

✅ 单元测试
------

[](#-单元测试)

执行 PHPUnit 单元测试：

```
composer test
```

执行 PHPUnit 单元测试并生成代码覆盖率报告：

```
composer test:coverage
```

🤝 贡献指南
------

[](#-贡献指南)

欢迎 Issue 与 PR，建议遵循以下流程：

1. Fork 仓库
2. 创建新分支进行开发
3. 提交 PR 前请确保测试通过、风格一致
4. 提交详细描述

📜 License
---------

[](#-license)

MIT License. See the [LICENSE](LICENSE) file for details.

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance49

Moderate activity, may be stable

Popularity7

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

6

Last Release

371d ago

Major Versions

v0.1.2 → v1.0.02025-05-11

### Community

Maintainers

![](https://www.gravatar.com/avatar/ebedf625b7a40647c79c0b4788067638b60eb50ed9d0cab47ea0852e03772020?d=identicon)[changhorizon](/maintainers/changhorizon)

### Embed Badge

![Health badge](/badges/hizpark-directory-tree/health.svg)

```
[![Health](https://phpackages.com/badges/hizpark-directory-tree/health.svg)](https://phpackages.com/packages/hizpark-directory-tree)
```

###  Alternatives

[laracrafts/laravel-url-shortener

Powerful URL shortening tools in Laravel

97110.7k](/packages/laracrafts-laravel-url-shortener)[ffi/location

PHP library for determining the physical location of binaries

1339.8k7](/packages/ffi-location)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
