Belirli bir yol için tüm alt dizinleri bir dizisini almak nasıl?

2 Cevap php

Örneğin, ben bu gibi bir dizin yapısı vardır:

my_stuff
   classes
      one
      two
          more
          evenmore
              manymore
                  subsub
                      subsubsub
          otherstuff
          morestuff
              deepstuff
                  toomuch

ve ben yolları dahil php sınıflar altında her şey (!) eklemek istiyorum. Nasıl böyle bir dizi almak istiyorsunuz? Bunun için bazı fantezi php fonksiyonu var mı?

2 Cevap

Recursively bir dizin yineleme SplIterators ile çok kolay. Siz sadece bunu

$path = realpath('.');

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

foreach($elements as $element){
    // element is an SplFileObject
    if($element->isDir()) { 
        echo "$element\n"; // do whatever
    }
}

However, do not add each directory to your include path.

Eğer ekleme yolu tüm bu klasörler eklerseniz, ciddi uygulama yavaşlatacaktır. Sınıf subsubsub ise, PHP ilk sınıfları, böylece daha sonra bir, iki ve daha sonra, my_stuff arayacaktır.

Instead have your class names follow the PEAR convention and use autoloading.

Görmek

Ben farkında değilim. Bunun gibi, dir veya benzer kullanımı yapar kendi özyinelemeli fonksiyon yazmak gerekecek.

Bu (en azından benim için) her bir ön uç sayfa yük için yürütmek için bir gereksiz kaynak yoğun aktivite gibi hissediyor Ancak, gerçekten, bir yerde bu yolları önbelleğe isteyeceksiniz. (Örneğin, geçmişte söylediğim ne sadece yeniden oluşturmak Eğer CMS içinde mantığını değiştirmek zaman dizinleri dahil, vb listesi gerekebilir)

Alternatif olarak, daha düşük seviyelerde öğeleri içeren sorumludur orta düzeyde öğeleri yapabilir. (Eğer Fabrika desen, vb durum olmayabilir hangi yararlanarak olsaydı bu sadece gerçekten mantıklı olur.)