Dizi dizin içerik `tatlı` çıkışını görüntülemek

2 Cevap php

Png: Her dosya türü uzantısını içeren dizinlere ve onların alt-dizinleri bir dizisini almak için aşağıdaki kodu kullanıyorum. Bu harika çalışıyor ama ben bir liste tarzı biçim eg çıktı dizinin sonuçlarına gerekiyor

* Test
  -> test2.png
  -> test1.png
  * subfolder
    -> test3.png
    * sub sub folder
      -> test4.png

vb

Kod:

$filter=".png";  
$directory='../test';  
$it=new RecursiveDirectoryIterator("$directory");
foreach(new RecursiveIteratorIterator($it) as $file){  
    if(!((strpos(strtolower($file),$filter))===false)||empty($filter)){  
        $items[]=preg_replace("#\\\#", "/", $file);  
    }
}

Sonuçların örneği dizi:

array (
  0 => '../test/test2.png',
  1 => '../test/subfolder/subsubfolder/test3.png',
  2 => '../test/subfolder/test3.png',
  3 => '../test/test1.png',
)

Ne istenen sonuca ulaşmanın en iyi yolu olurdu?

2 Cevap

Lütfen eğer-maddesinde, deneyin:

$items[]=preg_replace("#\\\#", "/", $file->getPathName());

Bu size arzu birine yakın bir çıktı vermelidir. Ancak, getPathName mutlak yolları verir.

Eğer dizinleri önce dosyaları görüntülemek istiyorsanız, daha fazla dosya daha sonra gelirdi eğer bilmiyorum çünkü, o zaman, sadece bir döngü içinde bunu yapamaz.

Sen bir ağacın (yol bileşeni tarafından endeksli diziler dizi) verileri toplamak veya sıralamak gerekir.

$components = explode('/',$path);
$file = array_pop($components);
$current = $root;
foreach($components as $component) {
  if (!isset($current[$component])) $current[$component] = array();
  $current = &$current[$component];
}
$current[$file] = true;

: Bu gibi size yapıyı vermelidir

array(
  'test'=>array(
      'test1.png'=>true,
      'subfolder'=>array(
      … 

Yani çalışmak kolay olacaktır (tür amacı yendi dersin RecursiveDirectoryIterator. Siz yinelemeli kullanarak aynı alabilir düzenli DirectoryIterator).

Eğer derinlemesine (karşılaştırma işlevi yazmak) tarafından yolları sıralamak Ya da, o zaman sadece uygun girinti ile geçen yol bileşenini yazdırarak çıktı bu mümkün olacak.