gpt4 book ai didi

php - 使用 PHP 的 RecursiveIteratorIterator 遍历多维数组

转载 作者:搜寻专家 更新时间:2023-10-31 22:10:01 25 4
gpt4 key购买 nike

我必须缓存一个树结构并稍后访问它。问题:我真的不知道如何声明数据以使其适合 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 它是一个数组。我还能尝试什么?

最佳答案

这是一种回答。实际上我放弃了并转向基于 SimpleXML 的解决方案。真的很简单,代码很少。最终有人会遇到这个问题,我的“解决方案”也可能是他的一种方式。所以我会把它包括在这里:

// data represented as xml
$xmlstring = <<<XML
<orgtree>
<level number="1">
<unit label="Universe" code="1111">
<level number="2">
<unit label="Asia" code="2000"></unit>
<level number="3">
<unit label="Hongkong" code="3203"></unit>
<level number="4">
<unit label="Greater Area" code="2081"></unit>
<unit label="Downtown" code="2041"></unit>
</level>
</level>
</unit>
<unit label="Africa" code="6201"></unit>
<unit label="North America" code="321"></unit>
</level>
</unit>
</level>
</orgtree>
XML;


$xml = simplexml_load_string($xmlstring);
// use xpath to select part of xml
foreach ($xml->xpath('//unit[@code="2000"]') as $parentUnit)
{
$subtree = $parentUnit->level;
foreach ($subtree->unit as $unit) {
var_dump($unit["label"]);
}
}

关于php - 使用 PHP 的 RecursiveIteratorIterator 遍历多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com