乘法foreach递归或RecursiveIteratorIterator

时间:2014-07-08 14:28:55

标签: php arrays loops foreach spl

我正在使用此代码,效果很好。然而,由于多次预测,似乎不是最好的选择。

foreach ($arr_items as $key => $value) {
    $id_user = $key;
    foreach ($value as $k => $v) {
        foreach ($v as $x => $y) {
            $id_transacao = $y['id_transacao'];
            $id_duplicated = $y['id_duplicated'];
            foreach ($y as $g => $b) {
                if (is_array($b)){
                    foreach ($b as $kn => $l) {
                        var_dump($id_user);
                        var_dump($id_transacao);
                        var_dump($id_duplicated);
                        var_dump($l);
                    }
                }
            }
        }
    }
}

此代码将输出一堆结果,可能很快,但完全无序。

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

}   

我的问题是:如果我使用第一个代码就可以了,或者我应该尝试使用RecursiveIteratorIterator。我的问题是难以在第二个选项中生成完全相同的结构。 无论如何,任何优化都会很好。

2 个答案:

答案 0 :(得分:1)

您是否在mode上尝试了RecursiveIteratorIterator::__construct参数的任何其他常量?默认值为RecursiveIteratorIterator::LEAVES_ONLY

来自Docs

RecursiveIteratorIterator::LEAVES_ONLY - The default. Lists only leaves in iteration.
RecursiveIteratorIterator::SELF_FIRST - Lists leaves and parents in iteration with parents coming first.
RecursiveIteratorIterator::CHILD_FIRST - Lists leaves and parents in iteration with leaves coming first.

也许SELF_FIRST就是您所需要的。

$iterator = new RecursiveIteratorIterator(
                new RecursiveArrayIterator($arr_items), 
                RecursiveIteratorIterator::SELF_FIRST);

答案 1 :(得分:1)

与foreach循环中的RecursiveIteratorIterator一起,您可以使用$filter->getDepth()函数来分隔子,自我和孙子。

您也可以设置$filter->setMaxDepth(int $depth);