[ create a new paste ] login | about

Link: http://codepad.org/fSwJjyz5    [ raw code | output | fork ]

PHP, pasted on Feb 6:
<?php
class deps{
  protected $items = array();

  public function add($item, array $deps = array()){
    $this->items[$item] = $deps;
  }
  
  protected function checkDependencies($item) {
    if (!isset($this->items[$item])) {
      return false;
    }
    
    foreach ($this->items[$item] as $dep) {
      if (!$this->checkDependencies($dep)) {
        return false;
      }
    }
    
    return true;
  }
  
  public function getResolved() {
    $result = array();
    
    foreach ($this->items as $item => $deps) {
      if ($this->checkDependencies($item)) {
        $result[] = $item;
      }
    }
    
    return $result;
  }
  
  public function getUnresolved() {
    $result = array();
    
    foreach ($this->items as $item => $deps) {
      if (!$this->checkDependencies($item)) {
        $result[] = $item;
      }
    }
    
    return $result;
  }
}

$deps = new deps;

$deps->add('item2', array('item1'));            // <- depends on item1
$deps->add('item1', array());                   // <- no dependency
$deps->add('item3', array('item1', 'item5'));   // <- depends on item1 and item5
$deps->add('A',     array('item3'));            // <- on item3
$deps->add('C',     array('item2', 'item1'));   // ......

print_r($deps->getResolved());
print_r($deps->getUnresolved());


Output:
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [0] => item2
    [1] => item1
    [2] => C
)
Array
(
    [0] => item3
    [1] => A
)


Create a new paste based on this one


Comments: