Ограничение глубины рекурсии RecursiveIteratorIterator () - PullRequest
2 голосов
/ 20 июня 2010

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

После Лаури Лехтинена я пробовал это:

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

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

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

Ответы [ 2 ]

5 голосов
/ 20 июня 2010

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

0 голосов
/ 20 июня 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 или более позднюю.

...