public function sort($dependents) { $topologicalSort = new StringSort(); // build graph for topological sort foreach ($dependents as $name => $dependent) { $topologicalSort->add($name, $dependent instanceof Dependent ? $dependent->depends() : []); } // sort graph $sortedList = $topologicalSort->sort(); $sortedComponents = []; //translate sort graph foreach ($sortedList as $name) { $sortedComponents[$name] = $dependents[$name]; } return $sortedComponents; }
/** * Sort topological and resolve dependencies * * @param $components * @return array|\string[] */ private function sort($components) { $topologicalSort = new StringSort(); // build graph for topological sort foreach ($components as $name => $component) { /** @var Component $component */ $topologicalSort->add($name, $component->depends()); } // sort graph $sortedList = $topologicalSort->sort(); $sortedComponents = []; //translate sort graph foreach ($sortedList as $name) { $sortedComponents[$name] = $components[$name]; } return $sortedComponents; }