我尝试用 PHP 的工厂类编写自定义数组迭代器。我的问题:我需要所有数组的所有数据,例如,这是一个简单的 PHP 数组:
Array
(
[authentication] => Array
(
[basic] => Array
(
[username] => guest
[password] => guest
)
[filters] => Array
(
[price] => 100
[owener] => me
)
)
)
我在 PHP 的文档页面上看到,我可以使用两个简单的类并使用简单的 foreach 进行迭代:
$iterator = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($this->phpArray));
foreach($iterator as $key => $value) {
$d = $iterator->getDepth();
echo "depth: $d $key => $value\n";
}
该程序抛出以下输出:
depth: 2 key: username, value: guest
depth: 2 key: password, value: guest
depth: 2 key: price, value: 100
depth: 2 key: owener, value: me
如何修改我的代码可以对所有数据执行以下示例输出:
depth: 0 key: authentication, value:
depth: 1 key: basic, value:
depth: 1 key: filters,
depth: 2 key: username, value: guest
depth: 2 key: password, value: guest
depth: 2 key: price, value: 100
depth: 2 key: owener, value: me
谢谢!
最佳答案
当您使用 RecursiveIteratorIterator
时您可以设置不同的遍历模式。默认的是 RecursiveIteratorIterator::LEAVES_ONLY
。这就是为什么你只得到叶子,而不是所有的值(顺便说一下 array_walk_recursive
具有相同的行为)。要访问所有元素,您需要将模式设置为 RecursiveIteratorIterator::SELF_FIRST
:
$iterator = new \RecursiveIteratorIterator(
new \RecursiveArrayIterator($array),
\RecursiveIteratorIterator::SELF_FIRST
);
这里是 working demo .
关于PHP RecursiveArrayIterator类递归获取键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41317748/