在RecursiveIteratorIterator中获取参考项

时间:2015-12-10 05:18:30

标签: php

给出以下数组结构:

$array = array('level1'=>array('level2'=>array('url'=>$url,'title'=>$title)));

使用:

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

    foreach($iterator as $key=>$value) {

        if(is_null($value)){
            echo $key.' -- '.$value.'<br />';
        }
    }

我可以在值为null时回显,但我不知道的是该项的数组路径

当这是一个更复杂的数组时,我需要知道具有null的路径是$array['level1']['level2']['url']

目前我只知道它是url,不知道项目在结构中的实际位置。

使用这个迭代器方法,我如何计算出路径是什么,这样我可以在数组中的null时更新它?

1 个答案:

答案 0 :(得分:1)

您可以使用getDepthgetSubIterator功能来实现理想的路径。

看看下面的解决方案:

$url = null;
$title = null;
$array = array(
    'level1' => array(
        'level2' => array(
            'level3' => array(
                'url' => $url,
                'title' => $title
            )
        ),

    )
);

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

foreach ($iterator as $key => $value) {
    $keys = array();
    if (is_null($value)) {
        $keys[] = $key;
        for ($i = $iterator->getDepth() - 1; $i >= 0; $i--) {
            $keys[] = $iterator->getSubIterator($i)->key();
        }

        $key_paths = array_reverse($keys);
        echo "'{$key}' have null value which path is: " . implode(' --> ', $key_paths) . '<br>';
    }
}

在上面的示例中,$array有2个null值的键,即 url title 。变量$key_paths包含欲望路径,上述脚本的输出将为:

'url' have null value which path is: level1 --> level2 --> level3 --> url
'title' have null value which path is: level1 --> level2 --> level3 --> title