Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sam152/treenum
Treenum: tree + enum
https://github.com/sam152/treenum
Last synced: about 2 months ago
JSON representation
Treenum: tree + enum
- Host: GitHub
- URL: https://github.com/sam152/treenum
- Owner: Sam152
- Created: 2023-11-06T05:38:58.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-07T06:07:28.000Z (about 1 year ago)
- Last Synced: 2024-04-08T01:59:03.007Z (9 months ago)
- Language: PHP
- Size: 6.84 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Treenum: tree + enum in PHP
===Treenum is a lightweight library for defining and traversing items in an enum, that have a tree structure.
```
composer require sam152/treenum
```## Defining a tree
Trees may be defined either by identifying the parents or the children of any given item, whichever is easier for the consumer.
Example of a tree identified by declaring children of any given item:
```php
enum Pet implements TreeEnum {
use GetChildrenImplementation;case Dog;
case Retriever;
case Labrador;
case Golden;
case Terrier;
case Bird;
case Chicken;
case Cat;public function getChildren(): array {
return match ($this) {
static::Dog => [
static::Retriever,
static::Terrier,
],
static::Retriever => [
static::Labrador,
static::Golden,
],
static::Bird => [
static::Chicken,
],
default => [],
};
}
}
```And the same tree identified by declaring the parent of any given item:
```php
enum Pet implements TreeEnum {
use GetParentImplementation;case Dog;
case Retriever;
case Labrador;
case Golden;
case Terrier;
case Bird;
case Chicken;
case Cat;public function getParent(): static|null {
return match($this) {
static::Labrador, static::Golden => static::Retriever,
static::Retriever, static::Terrier => static::Dog,
static::Chicken => static::Bird,
default => null,
};
}
}```
## Public API
The following methods are defined on `TreeEnum` and can be used to traverse the tree:
```php
public function getAncestors(): array;
public function getDescendants(): array;
public function getChildren(): array;
public function getParent(): static | null;
public function getDepth(): int;
public static function rootCases(): array;
public static function leafCases(): array;
```### Example usage:
```php
php > var_export(Pet::Dog->getChildren());
array (
Pet::Retriever,
Pet::Terrier,
)
``````php
php > var_export(Pet::rootCases());
array (
Pet::Dog,
Pet::Bird,
Pet::Cat,
)
```### Additional helpers
```php
php > print \Treenum\Internal\Utility::dumpTree(Pet::class);
.
├── Dog
│ ├── Retriever
│ │ ├── Labrador
│ │ └── Golden
│ └── Terrier
├── Bird
│ └── Chicken
└── Cat
```