private static function visit(&$ordering, &$tempMarked, $nodes, $curNode) { // if $curNode is not in $nodes then it is not a package we care about. if (!isset($nodes[$curNode])) { $tempMarked[$curNode] = false; return; } if (isset($tempMarked[$curNode]) && $tempMarked[$curNode]) { throw new \UnexpectedValueException('Cycle in the dependencies of the project'); } if (!isset($tempMarked[$curNode])) { $tempMarked[$curNode] = true; foreach ($nodes[$curNode] as $node) { TopologicalSort::visit($ordering, $tempMarked, $nodes, $node); } $tempMarked[$curNode] = false; $ordering[] = $curNode; } }