我必须缓存一个树结构并稍后访问它。问题:我真的不知道如何声明数据以使其适合RecursiveIteratorIterator
等。这可能是一个非常n00bish的问题,但我尝试了很多组合并且没有想法:-(
从概念上讲,数据如下所示:
ROOT code : 1111, label : Universe
- code : 2000, label : Asia
- code : 3203, label : Hongkong
-code : 2081, label: Greater Area
-code : 2041, label: Downtown
- code : 4020, label : Shanghai
- code : 6201, label : Africa
- code : 321, label : North America
我想访问给定代码的所有直接孩子,例如亚洲香港和上海。
RecursiveIteratorIterator
似乎让这很容易。
// looking for Asia with code = 2000
$iterator = new RecursiveIteratorIterator(new Universe_Tree($tree));
foreach ($iterator as $key => $item) {
if ($item->code == 2000) {
var_dump($iterator->callGetChildren());
}
}
Universe_Tree 类还没有做太多事情:
class Universe_Tree extends ArrayIterator implements RecursiveIterator {
public function hasChildren() {
return (is_array($this->current()));
}
public function getChildren() {
return new self($this->current());
}
}
我最好的方法是创建每个节点的对象并将它们存储在嵌套数组中
$universe = new stdClass();
$universe ->code = 1111;
$universe ->label = "Universe";
$tree = array(
array($universe,
array(
$asia,
(array($shanghai,$hongkong)),
$europe
// and so on
)
);
不幸$iterator->callGetChildren()
的是不返回子元素,只返回当前元素。可能是因为节点没有正确嵌套在一起。我还尝试使用 parentId 嵌套数组,但这会导致错误消息ArrayIterator
表明这不是数组或对象,尽管根据var_dump
它是一个数组。我还能尝试什么?