plasmaconduit / dependency-graph
Installs: 3 535
Dependents: 1
Suggesters: 0
Security: 0
Stars: 14
Watchers: 1
Forks: 1
Open Issues: 0
Requires
- plasmaconduit/either: 0.2.*
- plasmaconduit/map: 0.1.*
- plasmaconduit/option: 0.2.*
This package is not auto-updated.
Last update: 2016-11-24 06:35:06 UTC
README
A dependency graph implementation.
Examples
<?php use PlasmaConduit\DependencyGraph; use PlasmaConduit\dependencygraph\DependencyGraphNode; use PlasmaConduit\dependencygraph\DependencyGraphNodes; // Initialize the graph and some stand alone nodes $graph = new DependencyGraph(); $nodeA = new DependencyGraphNode("A"); $nodeB = new DependencyGraphNode("B"); $nodeC = new DependencyGraphNode("C"); $nodeD = new DependencyGraphNode("D"); $nodeE = new DependencyGraphNode("E"); $nodeF = new DependencyGraphNode("F"); $nodeG = new DependencyGraphNode("G"); // Add the root node A $graph->addRoot($nodeA); $graph->addDependency($nodeA, $nodeB); $graph->addDependency($nodeA, $nodeC); $graph->addDependency($nodeB, $nodeD); $graph->addDependency($nodeC, $nodeE); $graph->addDependency($nodeC, $nodeF); // Tree Status: // A // / \ // B C // / / \ // D E F echo json_encode($graph->toArray(), JSON_PRETTY_PRINT); // Outputs: // [ // { // "A": [ // { // "B": [ // "D" // ] // }, // { // "C": [ // "D", // "E" // ] // } // ] // } // ] // Try to create a circular dependency by making E dependent on A // This should fail and refuse to fulfill the dependency $graph->addDependency($nodeE, $nodeA); echo json_encode($graph->toArray(), JSON_PRETTY_PRINT); // Outputs: // [ // { // "A": [ // { // "B": [ // "D" // ] // }, // { // "C": [ // "D", // "E" // ] // } // ] // } // ] // Add a node that already has dependencies to an adjacent branch $graph->addDependency($nodeD, $nodeC); // Tree Status: // A // / \ // B C // / / \ // D E F // \ // C // / \ // E F echo json_encode($graph->toArray(), JSON_PRETTY_PRINT); // Outputs: // [ // { // "A": [ // { // "B": [ // { // "D": [ // { // "C": [ // "E", // "F" // ] // } // ] // } // ] // }, // { // "C": [ // "E", // "F" // ] // } // ] // } // ] echo implode(",", $graph->flatten());