<?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());