codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
<?php class Dependencies { private $_items; private $_dependencies; public function add($item, $dependencies = array()) { $this->_items[$item] = (count($dependencies) > 0) ? $dependencies : null; foreach($dependencies as $dependency) { $this->_dependencies[$dependency][] = $item; } } public function get_load_order() { $load_order = array(); $seen = array(); foreach($this->_items as $item => $dependencies) { $tmp = $this->get_dependents($item, $seen); if($tmp[2] === false) { $load_order = array_merge($load_order, $tmp[0]); $seen = $tmp[1]; } } return $load_order; } public function get_failed_items() { $failed = array(); $seen = array(); foreach($this->_items as $item => $dependencies) { $tmp = $this->get_dependents($item, $seen); if($tmp[2] !== false) { $failed[] = $item; continue; } $seen = $tmp[1]; } return $failed; } private function get_dependents($item, $seen = array()) { if(array_key_exists($item, $seen)) { return array(array(), $seen, false); } if($this->item_exists($item)) { $order = array(); $failed = array(); $seen[$item] = true; if($this->has_dependents($item)) { foreach($this->_items[$item] as $dependency) { $tmp = $this->get_dependents($dependency, $seen); $order = array_merge($tmp[0], $order); $seen = $tmp[1]; if($tmp[2] !== false) { $failed = array_merge($tmp[2], $failed); } } } $order[] = $item; $failed = (count($failed) > 0) ? $failed : false; return array($order, $seen, $failed); } return array(array(), array(), array($item)); } private function item_exists($item) { if(array_key_exists($item, $this->_items)) { return true; } return false; } private function has_dependents($item) { if($this->item_exists($item) AND is_array($this->_items[$item])) { return true; } return false; } } $deps = new Dependencies(); $deps->add('countries', array('menus', 'settings')); $deps->add('dashboard', array('menus')); $deps->add('languages', array('menus', 'settings')); $deps->add('menus'); $deps->add('modules' , array('menus')); $deps->add('settings' , array('menus')); $deps->add('users' , array('menus')); $load_order = $deps->get_load_order(); $failed_items = $deps->get_failed_items(); echo '<pre>'; echo 'Loaded: '; print_r($load_order); echo 'Failed: '; print_r($failed_items); echo '</pre>';
Private
[
?
]
Run code
Submit