2012-01-11 13 views
6

मैं PHP के एसपीएल रिकर्सिव इटरेटर्स के साथ काम कर रहा हूं, लेकिन वे मुझे भ्रमित कर रहे हैं, लेकिन मैं सीख रहा हूं।PHP के इटरेटर वर्ग

मैं उन परियोजनाओं में उनका उपयोग कर रहा हूं जहां मुझे सभी फ़ाइलों को दोबारा पकड़ने और मेरे परिणाम से फ़ोल्डर्स को बाहर करने की आवश्यकता है। मैं शुरू में इस पद्धति का उपयोग कर रहा था ...

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

foreach ($iterator as $fileinfo) {  
    if ($fileinfo->isDir()) { 
     //skip directories 
     //continue; 
    }else{ 
     // process files 
    } 
} 

लेकिन फिर एक बहुत उपयोगकर्ता है कि मैं इस विधि का उपयोग करने के बजाय इतना है कि मैं अपने पाश में isDir() विधि का उपयोग करने की जरूरत नहीं होगी सुझाव दिया ...

$directory = new RecursiveDirectoryIterator($path, 
         RecursiveDirectoryIterator::SKIP_DOTS); 
$iterator = new RecursiveIteratorIterator($directory, 
         RecursiveIteratorIterator::LEAVES_ONLY); 

सूचना है कि मैं RecursiveDirectoryIterator निर्माता जो फ़ोल्डर या . और ..

को छोड़ अब मैं क्योंकि कुछ परीक्षण के बाद उलझन में हूँ, यहाँ तक किका उपयोग किए बिना माना जाता है में RecursiveDirectoryIterator::SKIP_DOTS इस्तेमाल कियाऐसा लगता है कि वे उन्हें नहीं दिखा रहे हैं, मैं विंडोज का उपयोग कर रहा हूं, यही कारण हो सकता है, क्या डॉट्स केवल यूनिक्स प्रकार प्रणाली पर दिखाई देते हैं? या क्या मैं इस बिंदु पर उलझन में हूं कि मुझे कुछ याद आ रहा है?

RecursiveIteratorIterator::CHILD_FIRST के बजाय RecursiveIteratorIterator::LEAVES_ONLY का उपयोग करके यह फ़ोल्डर्स को मेरे परिणाम में दिखने से रोक देगा जो मैं चाहता हूं लेकिन मुझे समझ में नहीं आता क्यों? प्रलेखन में इस

+2

* (sidenote) * डिफ़ॉल्ट पुनरावृत्ति मोड 'LEAVES_ONLY' है, इसलिए आपको केवल 'नया रिकर्सिवइटरेटर इटरेटर ($ निर्देशिका) है;' - मैं इस – Gordon

उत्तर

3

पेड़ में कोई आइटम नहीं है, जिसमें इसके आगे लटकने वाली कोई और चीज नहीं है, यानी यह शाखा का अंत है। परिभाषा के अनुसार, फाइलें इस विवरण को फिट करती हैं।

-- folder 
    | 
    |- folder 
    | | 
    | |- file  <- a leaf 
    | | 
    | -- folder 
    |  | 
    |  -- file <- another leaf 
    | 
    -- file   <- yet another leaf 

RecursiveIteratorIterator करने के लिए "पत्ती केवल" मोड सेट कर, यह किसी भी आइटम है कि एक पत्ता नहीं है छोड़ जा रहा है।

+0

के लिए दस्तावेज़ों का विस्तार करूंगा इसका मतलब यह है कि' रिकर्सिव डायरेक्टरी इटरेटर :: पत्ता मोड का उपयोग करते समय SKIP_DOTS' की आवश्यकता नहीं है? – JasonDavis

+0

मुझे ऐसा लगता है, लेकिन मेरे सिर के ऊपर से पुष्टि नहीं कर सका। – deceze

+0

क्या इसमें खाली निर्देशिका शामिल नहीं होंगी? –

संबंधित मुद्दे