array('forum'), 'after' => array('taxonomy')); $queue = $current_hook = array(); foreach ($hooks as $module => $element) { $current_hook[$module] = $element['nodeapi']; } $colors = array(); foreach ($current_hook as $start => $hook) { if (isset($hook['after'])) { $colors[$start] = WHITE; // edges pointing out from this vertex foreach ($hook['after'] as $end) { $adj[$start][$end] = 1; if (!isset($adj[$end])) { $adj[$end] = array(); $colors[$end] = WHITE; } } } if (isset($hook['before'])) { $colors[$start] = WHITE; // edges pointing to this vertex if (!isset($adj[$start])) { $adj[$start] = array(); } foreach ($hook['before'] as $end) { $adj[$end][$start] = 1; } } } function dfs(&$colors, $key, $adj_set = NULL) { static $time = 1, $adj, $ordered = array();; if (!isset($adj)) { $adj = $adj_set; return; } $colors[$key] = GREY; foreach (array_keys($adj[$key]) as $new_key) { if ($colors[$new_key] == WHITE) { dfs($colors, $new_key); } } $colors[$key] = BLACK; $ordered[] = $key; return $ordered; } $ordered = array(); dfs($c, NULL, $adj); foreach (array_keys($adj) as $key) { if ($colors[$key]['color'] == WHITE) { $ordered = dfs($colors, $key); } } var_dump($ordered);