Download the PHP package php-architecture-kit/graph without Composer
On this page you can find all versions of the php package php-architecture-kit/graph. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download php-architecture-kit/graph
More information about php-architecture-kit/graph
Files in php-architecture-kit/graph
Package graph
Short Description Graph data structure implementation to use as base for any (including Domain) Graphs.
License MIT
Homepage https://github.com/php-architecture-kit/graph
Informations about the package graph
php-architecture-kit/graph
Framework-agnostic graph library for PHP applications. It provides a consistent API for building graphs with vertices and directed/undirected edges, traversing graph elements with visitors, and calculating shortest paths between vertices.
Features
- Directed and undirected edges - Use
DirectedEdgeandUndirectedEdgein the same graph - Strongly typed identities -
VertexIdandEdgeIdvalue objects - Configurable validation - Toggle self-loop, multi-edge, and cyclic-edge rules
- Optional named edge weights - Define defaults per edge class and override per edge
- Traversal API (Visitor Pattern) - Traverse vertices/edges with stop control
- Navigation API - Select entities as contexts and query neighbors/incident edges
- Shortest path finder - Bidirectional shortest path search with optional edge filtering
- Automatic incidence index updates - Built-in index synchronization through graph events
Installation
Quick Start
Graph Configuration
Use GraphConfig to control validation behavior and edge weights.
Navigation and Context API
GraphNavigator is the main read/query entry point.
Selecting Vertices and Edges
Working with Context Objects
Traversal (Visitor Pattern)
The traversal module supports multiple visitors and three control actions:
VisitAction::ContinueVisitAction::StopAtCurrentEntityVisitAction::StopImmediately
Shortest Path
Shortest path search is available via GraphNavigator::shortestPathTo(...) and uses bidirectional search internally.
Returns:
EdgeContext[]when a path exists[]when source equals target[]when no path matches the filter
Edge Weights
If weightConfig is enabled, you can define and read named weights per edge.
API Reference
GraphNavigator
| Method | Description |
|---|---|
selectVertex(VertexId $id): VertexContext |
Select one vertex as context |
selectVertices(?callable $filter = null): VertexContext[] |
Select many vertices with optional filter |
selectEdge(EdgeId $id): EdgeContext |
Select one edge as context |
selectEdges(?callable $filter = null): EdgeContext[] |
Select many edges with optional filter |
traverseVertices(array $visitors, ?callable $filter = null): VertexTraversalResult |
Traverse vertices with visitors |
traverseEdges(array $visitors, ?callable $filter = null): EdgeTraversalResult |
Traverse edges with visitors |
VertexContext
| Method | Description |
|---|---|
edges(?callable $filter = null): EdgeContext[] |
Get incident edges for this vertex |
neighbors(?callable $edgeFilter = null, ?callable $filter = null): VertexContext[] |
Get neighboring vertices |
EdgeContext
| Method | Description |
|---|---|
isDirected(): bool |
Check if edge is directed |
isUndirected(): bool |
Check if edge is undirected |
u(): VertexInterface |
Resolve first endpoint |
v(): VertexInterface |
Resolve second endpoint |
weights(): EdgeWeights |
Resolve edge weights (when configured) |
Traversal Interfaces
| Interface | Method |
|---|---|
VertexVisitorInterface |
visit(VertexInterface $vertex): VisitResult |
EdgeVisitorInterface |
visit(EdgeInterface $edge): VisitResult |
License
MIT