Gab*_*bor 3 php arrays iterator
我试图用 PHP 的工厂类编写一个自定义数组迭代器。我的问题:我需要所有数组的所有数据,例如,这是一个简单的 PHP 数组:
Array
(
    [authentication] => Array
        (
            [basic] => Array
                (
                    [username] => guest
                    [password] => guest
                )
            [filters] => Array
                (
                    [price] => 100
                    [owener] => me
                )
        )
)
Run Code Online (Sandbox Code Playgroud)
我在 PHP 的文档页面上看到,我可以使用两个简单的类并使用简单的 foreach 进行迭代:
    $iterator = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($this->phpArray));
    foreach($iterator as $key => $value) {
        $d = $iterator->getDepth();
        echo "depth: $d $key => $value\n";
    }
Run Code Online (Sandbox Code Playgroud)
该程序抛出以下输出:
depth: 2 key: username, value: guest
depth: 2 key: password, value: guest
depth: 2 key: price, value: 100
depth: 2 key: owener, value: me
Run Code Online (Sandbox Code Playgroud)
如何修改我的代码可以使用所有数据执行以下示例输出:
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
Run Code Online (Sandbox Code Playgroud)
谢谢!
使用RecursiveIteratorIterator时可以设置不同的遍历方式。默认为RecursiveIteratorIterator::LEAVES_ONLY. 这就是为什么你只得到叶子,而不是所有的值(顺便说一句,array_walk_recursive有相同的行为)。要访问所有元素,您需要将模式设置为RecursiveIteratorIterator::SELF_FIRST:
$iterator = new \RecursiveIteratorIterator(
    new \RecursiveArrayIterator($array),
    \RecursiveIteratorIterator::SELF_FIRST
);
Run Code Online (Sandbox Code Playgroud)
这是工作演示。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2639 次  |  
        
|   最近记录:  |