2010-03-10 5 views

उत्तर

18

डिफ़ॉल्ट रूप से, RecursiveIteratorIteratorLEAVES_ONLY दूसरा तर्क के लिए __construct करने के लिए उपयोग होगा। इसका मतलब है कि यह केवल फाइलें वापस करेगा। आप फ़ाइलों और निर्देशिका शामिल करना चाहते हैं (कम से कम है कि मैं एक पूर्ण निर्देशिका वृक्ष क्या विचार करूँगा है), आप क्या करना है चाहते हैं:

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path), 
    RecursiveIteratorIterator::SELF_FIRST 
); 

और फिर आप foreach इस पर कर सकते हैं। यदि आप इसे आउटपुट करने के बजाय निर्देशिका पेड़ को वापस करना चाहते हैं, तो आप इसे एक सरणी में संग्रहीत कर सकते हैं, उदा।

foreach ($iterator as $fileObject) { 
    $files[] = $fileObject; 
    // or if you only want the filenames 
    $files[] = $fileObject->getPathname(); 
} 

तुम भी ऐसा करके foreach बिना $fileObjects की सरणी बना सकते हैं:

$files[] = iterator_to_array($iterator); 

आप केवल चाहते हैं निर्देशिका $iterator इस तरह से अधिक लौटे, foreach:

foreach ($iterator as $fileObject) { 
    if ($fileObject->isDir()) { 
     $files[] = $fileObject; 
    } 
} 
+0

बहुत धन्यवाद @ गॉर्डन, बहुत विस्तृत;) – kmunky

3

तुम बस या कर सकते हैं, everythng जो आप चाहते

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file) 
{ 
    /* @var $file SplFileInfo */ 
    //... 
} 
+0

हाय, जो मुझे समझ में नहीं आता है, कैसे - [रिकर्सिवइटरेटर इटरेटर] के PHP दस्तावेज़ से (http://php.net/manual/fr/class.recursiveiteratoriterator .php) - क्या आप कटौती करते हैं कि '$ file' प्रकार SplfileInfo है? – martin