كيف يمكنني استرجاع شجرة الدليل الكامل باستخدام SPL؟
سؤال
كيف يمكنني استرداد شجرة الدليل الكامل باستخدام SPL
, ربما تستخدم RecursiveDirectoryIterator
و RecursiveIteratorIterator
?
المحلول
بشكل افتراضي، 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();
}
يمكنك أيضا إنشاء مجموعة من $fileObjects
بدون ال foreach
عن طريق القيام:
$files[] = iterator_to_array($iterator);
إذا كنت ترغب فقط في إعادة الدلائل، foreach
على مدار $iterator
مثله:
foreach ($iterator as $fileObject) {
if ($fileObject->isDir()) {
$files[] = $fileObject;
}
}
نصائح أخرى
يمكنك فقط، أو تفعل كل شيء تريده
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}
لا تنتمي إلى StackOverflow