PHP相关性类 [英] PHP dependency class
本文介绍了PHP相关性类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
类:
类DEPS { 变量$物品; 函数add($项目,$ DEPS =阵列()){
$这个 - >项目[$项目= $ DEPS;
}
}
我怎么能生成$数组考虑到依赖($ DEPS)订购的商品?
例如:
$ DEPS =新DEPS;$ deps->添加('ITEM2',阵列('ITEM1')); //< - 取决于ITEM1
$ deps->添加('ITEM1',阵列()); //< - 不依赖
$ deps->添加(项目3,阵列('ITEM1','ITEM5')); //< - 取决于ITEM1和ITEM5
$ deps->添加('A',阵列('项目3')); //< - 关于项目3
$ deps->添加('C',阵列('ITEM2','ITEM1')); // ......
的有序排列是:
ITEM1
ITEM2
C
和第二个数组,物品,需要一个或多个依赖不存在的:
项目3
一个
解决方案
是这样的:
类DEPS {
保护$项目=阵列(); 公共函数add($项目,数组$ DEPS =阵列()){
$这个 - >项目[$项目= $ DEPS;
} 保护功能checkDependencies($项目){
如果(!使用isset($这个 - >项目[$项目])){
返回false;
} 的foreach($这个 - >项目[$项目]为$ DEP){
如果(这 - $>!checkDependencies($ DEP)){
返回false;
}
} 返回true;
} 公共职能getResolved(){
$结果=阵列(); 的foreach($这个 - >项目为$项目=> $ DEPS){
如果($这个 - > checkDependencies($项目)){
$结果[] = $项目;
}
} 返回$结果;
} 公共职能getUnresolved(){
$结果=阵列(); 的foreach($这个 - >项目为$项目=> $ DEPS){
如果(这 - $>!checkDependencies($项目)){
$结果[] = $项目;
}
} 返回$结果;
}
}$ DEPS =新DEPS;$ deps->添加('ITEM2',阵列('ITEM1')); //< - 取决于ITEM1
$ deps->添加('ITEM1',阵列()); //< - 不依赖
$ deps->添加(项目3,阵列('ITEM1','ITEM5')); //< - 取决于ITEM1和ITEM5
$ deps->添加('A',阵列('项目3')); //< - 关于项目3
$ deps->添加('C',阵列('ITEM2','ITEM1')); // ......的print_r($ deps-> getResolved());
/ *
排列
(
[0] => ITEM2
[1] => ITEM1
[2] => C
)
* /的print_r($ deps-> getUnresolved());
/ *
排列
(
[0] =>项目3
[1] =>一个
)
* /
The class:
class deps{
var $items;
function add($item, $deps = array()){
$this->items[$item] = $deps;
}
}
How can I generate an array with $items ordered by taking into account dependencies ($deps) ?
For example:
$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')); // ......
The ordered array would be:
item1
item2
C
And a second array, with items that needed one or more dependencies that didn't exist:
item3
A
解决方案
Something like:
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());
/*
Array
(
[0] => item2
[1] => item1
[2] => C
)
*/
print_r($deps->getUnresolved());
/*
Array
(
[0] => item3
[1] => A
)
*/
这篇关于PHP相关性类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文