2010-06-20 19 views
2

J'utilise RecursiveIteratorIterator() pour explorer les sous-dossiers de mon chemin actuel, mais de cette façon, tous les arbres sont explorés, mais je veux juste que l'enfant direct de mon fodleur soit exploré. Comment puis-je dire à RecursiveIteratorIterator() de ne pas aller beaucoup plus loin et de s'arrêter aux premiers subfodlers du dossier en cours?Limitation de la profondeur de récursivité RecursiveIteratorIterator()

Suite à Lauri Lehtinen, je l'ai essayé:

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

i ont PHP 5.2.3, mais il me dire que setMaxDepth est indéfini.

Fatal error: Call to undefined method RecursiveDirectoryIterator::setMaxDepth()

+2

vous appelez RecursiveDirectoryIterator, pas RecursiveIteratorIterator. – Artefacto

Répondre

0

Comme l'a dit Lauri, la mise en RecursiveIteratorIterator::setMaxDepth à 1 est la meilleure approche.

Jetez un oeil à http://www.php.net/manual/en/class.recursiveiteratoriterator.php#91519 pour l'exemple suivant de comment l'utiliser:

<?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); 
} 
?> 

Si vous rencontrez des problèmes, assurez-vous que vous utilisez PHP 5.1.0 ou version ultérieure.