$_) { self::dependencyResolve($table, $graph, $resolved, $unresolved); } return empty($unresolved) ? $resolved : null; } /** * Algorithm to resolve dependencies * * @param int|string $item Item id * @param array $items All items * * @return void * * @since 1.0.0 */ private static function dependencyResolve(int | string $item, array $items, array &$resolved, array &$unresolved) : void { $unresolved[] = $item; if (!isset($items[$item])) { return; } foreach ($items[$item] as $dependency) { if (!\in_array($dependency, $unresolved)) { $unresolved[] = $dependency; self::dependencyResolve($dependency, $items, $resolved, $unresolved); } else { continue; // circular dependency } } if (!\in_array($item, $resolved)) { $resolved[] = $item; } foreach ($unresolved as $key => $unres) { if ($unres === $item) { unset($unresolved[$key]); } } } }