SPL
का उपयोग करके मैं the full directory tree
कैसे पुनर्प्राप्त कर सकता हूं?PHP एसपीएल रिकर्सिव डायरेक्टरी इटरेटर रिकर्सिवइटरेटर इटरेटर पूरे पेड़ को पुनर्प्राप्त कर रहा है
उत्तर
डिफ़ॉल्ट रूप से, RecursiveIteratorIterator
LEAVES_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;
}
}
तुम बस या कर सकते हैं, everythng जो आप चाहते
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}
हाय, जो मुझे समझ में नहीं आता है, कैसे - [रिकर्सिवइटरेटर इटरेटर] के PHP दस्तावेज़ से (http://php.net/manual/fr/class.recursiveiteratoriterator .php) - क्या आप कटौती करते हैं कि '$ file' प्रकार SplfileInfo है? – martin
बहुत धन्यवाद @ गॉर्डन, बहुत विस्तृत;) – kmunky