PHP RecursiveArrayIterator类递归获取键值对

标签 php arrays iterator

我尝试用 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/

相关文章:

c++ - 如何从输出迭代器中获取值类型?

Python - 如果没有使用下一个默认值,为什么会初始化它?

php - "no-ansi"选项不存在

javascript - 按键调用功能上的jquery触发器

php - 将单词拆分为 span 并在 div 中对齐

c++ - 修改列表后 std::list<T>::end() 的值是否改变?

php - 从数据库检索阿拉伯语数据

java - 如何在Java中找到数组中的最大数字

java - 为什么在这里使用 split 会产生不同的数组大小?

javascript - 为什么这段代码中的 console.log 返回 undefined?