Ограничение глубины рекурсии RecursiveIteratorIterator()

я использую RecursiveIteratorIterator() для изучения подпапок моего текущего пути, но таким образом исследуется все дерево, вместо этого я хочу, чтобы для файлов были исследованы только прямые дочерние элементы моего файла. Как я могу сказать RecursiveIteratorIterator() не идти дальше и остановиться на первых подфолдерах текущей папки?

Следуя Лаури Лехтинен, я пробовал это:

    $it = new RecursiveDirectoryIterator("$directory");
    $it->setMaxDepth(1);

у меня есть PHP 5.2.3, но он говорит мне, что setMaxDepth не определен.

Неустранимая ошибка: вызов неопределенного метода RecursiveDirectoryIterator::setMaxDepth()


person Terix    schedule 20.06.2010    source источник
comment
вы вызываете RecursiveDirectoryIterator, а не RecursiveIteratorIterator.   -  person Artefacto    schedule 20.06.2010


Ответы (2)


Используйте метод RecursiveIteratorIterator::setMaxDepth, чтобы установить глубину 1 (или столько уровней, как хочешь):

person Lauri Lehtinen    schedule 20.06.2010

Как сказал Лаури, лучше всего установить RecursiveIteratorIterator::setMaxDepth в 1. подход.

Взгляните на http://www.php.net/manual/en/class.recursiveiteratoriterator.php#91519 для следующего примера того, как его использовать:

<?php
$directory = "/tmp/";
$fileSPLObjects =  new RecursiveIteratorIterator(
                new RecursiveDirectoryIterator($directory),
                RecursiveIteratorIterator::CHILD_FIRST
            );
try {
    foreach( $fileSPLObjects as $fullFileName => $fileSPLObject ) {
        print $fullFileName . " " . $fileSPLObject->getFilename() . "\n";
    }
}
catch (UnexpectedValueException $e) {
    printf("Directory [%s] contained a directory we can not recurse into", $directory);
}
?>

Если у вас возникли проблемы, убедитесь, что вы используете PHP 5.1.0 или более позднюю версию.

person labratmatt    schedule 20.06.2010